webapi中使用session_webapi使用session - CSDN
精华内容
参与话题
  • WebAPI使用Session

    2019-06-02 09:02:22
    最近在改写WebApp时要将以前用泛型处理例程写的Captcha 改成使用WebApi 来实作机制,在实作的过程发现使用IRequiresSessionState session也无法使用(context.Session==null) 查过一些文章才发现需要在注册api路由...

    最近在改写WebApp时要将以前用泛型处理例程写的Captcha 改成使用WebApi 来实作机制,在实作的过程中发现使用IRequiresSessionState session也无法使用(context.Session==null)

    查过一些文章才发现需要在注册api路由需将RouteHandler 改写,才能使用。以下用ASP.net MVC 4来说明要实作的部分

    建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它

    复制代码
    public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState
    {
    public SessionRouteHandler(RouteData routeData) : base(routeData)
    {

        }
    }
    
    public class SessionControllerRouteHandler : HttpControllerRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
    
            return new SessionRouteHandler(requestContext.RouteData);
    
        }
    
    }
    

    复制代码

    在WebApiConfig中将config.Routes.MapHttpRoute 改成

    RouteTable.Routes.MapHttpRoute(using System.Web.Routing)并指定RouteHandler

    复制代码
    public static void Register(HttpConfiguration config)
    {
    RouteTable.Routes.MapHttpRoute(

    name: “DefaultApi”,

    routeTemplate: “api/{controller}/{id}”,

    defaults: new { id = RouteParameter.Optional }

    ).RouteHandler=new SessionControllerRouteHandler();
    }
    复制代码

    或者 在MVC的WebApi中默认是没有开启Session会话支持的。需要在Global中重写Init方法来指定会话需要支持的类型

    复制代码
    public override void Init()
    {
    PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
    base.Init();
    }

        void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
        {
            HttpContext.Current.SetSessionStateBehavior(
                SessionStateBehavior.Required);
        }
    

    复制代码
    或者:

    复制代码
    public override void Init()
    {
    this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
    base.Init();
    }
    复制代码

    在默认情况下是没有开启的。SessionStateBehavior有四个值:

    Default使用默认ASP.NET逻辑来确定请求的会话状态行为。默认逻辑是寻找IHttpHandler中是否存在标记会话状态接口。
    Disabled未启用会话状态来处理请求。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

    ReadOnly为请求启用只读会话状态。这意味着会话状态无法更新。此设置将覆盖已通过检查请求的处理程序确定的任何会话状态行为。

    Required为请求启用完全的读写会话状态行为。 此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。

    展开全文
  • webapi中使用session

    千次阅读 2016-12-05 00:24:36
    webapi中使用session修改global.cs里面的内容 using System; using System.Web; using System.Web.Routing; using System.Web.Http; using System.Web.Http.WebHost; using System.Web.SessionState;namespace ...
    
    webapi中使用session
    
    修改global.cs里面的内容
    using System;
    using System.Web;
    using System.Web.Routing;
    using System.Web.Http;
    using System.Web.Http.WebHost;
    using System.Web.SessionState;
    
    namespace ApiControllerExample
    {
        public class Global : System.Web.HttpApplication
        {
    
            public override void Init()
            {
            //取下注释下面这行语句,将使得全部Api都可以访问Session
                //this.PostAuthenticateRequest += (s, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
                base.Init();
            }
    
            protected void Application_Start(object sender, EventArgs e)
            {
                RouteConfig.RegisterRoutes(RouteTable.Routes);  // 注册路由
            }
        }
    
        public class SessionableControllerHandler : HttpControllerHandler, IRequiresSessionState
        {
            public SessionableControllerHandler(RouteData routeData) : base(routeData) { }
        }
    
        public class SessionStateRouteHandler : IRouteHandler
        {
            IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
            {
                return new SessionableControllerHandler(requestContext.RouteData);
            }
        }
    
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.MapHttpRoute(
                    name: "WebApiRoute1",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                ).RouteHandler = new SessionStateRouteHandler();  // 使用Session
    
    
                routes.MapHttpRoute(
                  name: "WebApiRoute2",
                  routeTemplate: "api/{controller}/{id}/{id2}",
                  defaults: new{id = RouteParameter.Optional }
              );  // 不使用Session
            }
        }
    }
    
    
    webapi用例:
    using System;
    using System.Web.Http;
    
    namespace ApiControllerExample
    {
        public class StateController : ApiController
        {
            public string Get(int id)
            {
                try
                {
                    return  GetStateInfo(id);
                }
                catch (Exception err)
                {
                    return "excep: " + err.Message;
                }
            }
    
            private string GetStateInfo(int id)
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
    
                if (id == 1)
                {
                    return context.Session["state"].ToString();
                }
                else if (id == 2)
                {
                    return context.Cache["state"].ToString();
                }
                else
                {
                    return context.Application["state"].ToString();
                }
            }
    
        //这个方法无法使用Session
            public string Get(int id, int id2)
            {
                System.Web.HttpContext context = System.Web.HttpContext.Current;
    
                try
                {
                    return context.Session["state"].ToString();
                }
                catch (Exception err)
                {
                    return "excep: " + err.Message;
                }
            }
        }
    }
    
    展开全文
  • web api中使用session的方法

    千次阅读 2016-01-12 13:59:49
    我们在编写web api的时候需要将一些基本信息写入session中一边下次使用,session可以直接就可以使用的,但是我们在刚开始的时候,有可能会遇到一些报错的麻烦,这是因为web api中需要手动编写代码开启session 的功能...
       我们在编写web api的时候需要将一些基本信息写入session中一边下次使用,session可以直接就可以使用的,但是我们在刚开始的时候,有可能会遇到一些报错的麻烦,这是因为web api中需要手动编写代码开启session 的功能:具体方法是在在Global.asax里添加:开启Session功能
    
     public class WebApiApplication : System.Web.HttpApplication
        {
            public override void Init()
            {
                this.PostAuthenticateRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
                base.Init();
            }
    这样你再使用session的时候就可以直接使用了,不报错了。
    展开全文
  • WebApi 中使用 Session

    2019-07-30 07:06:24
    1. 在Global.asax.cs 文件加入session支持 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Re...

    1. 在 Global.asax.cs 文件中加入session支持

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
            public override void Init()
            {
                //注册事件
                this.AuthenticateRequest += WebApiApplication_AuthenticateRequest;
                base.Init();
            }
            void WebApiApplication_AuthenticateRequest(object sender, EventArgs e)
            {
                //启用 webapi 支持session 会话
                HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
            }
    

     2.在 WebApiConfig.cs 中设置 路由session 传递

           public static void Register(HttpConfiguration config)
            {
              
                RouteTable.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                ).RouteHandler = new SessionControllerRouteHandler();
    
             
            }
            public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState
            {
                public SessionRouteHandler(RouteData routeData)
                    : base(routeData)
                {
                }
            }
            public class SessionControllerRouteHandler : HttpControllerRouteHandler
            {
                protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
                {
                    return new SessionRouteHandler(requestContext.RouteData);
                }
            }

    3. 在web,config 中设置跨域配值

        <httpProtocol>
          <customHeaders>
            <add name="Access-Control-Allow-Credentials" value="true" />
    //设置 前端ip地址 <add name="Access-Control-Allow-Origin" value="http://localhost:8080" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol>

     

    转载于:https://www.cnblogs.com/zhuzy/p/9498144.html

    展开全文
  • webapi使用session

    2019-11-18 18:04:55
    这里写自定义目录标题在 Global.asax.cs 文件加入session支持然后在webapi.congfig进行详细设置具体用法 在 Global.asax.cs 文件加入session支持 public override void Init() { this.PostAuthenticateRequest...
  • WebApi如何启用Session并且使用

    千次阅读 2019-11-13 17:12:45
    首先打开项目的Global.asax文件,重新方法init public override void Init() { //注册事件 this.AuthenticateRequest += WebApiApplication_AuthenticateRequest; base.Init(); ...
  • 在Controller里:  public class ValuesController : ApiController  {  // GET api/values  public IEnumerable Get()  {  var context = HttpContext.Current;  
  • c# .net mvc webapi Filters 筛选器获取 请求参数和响应内容
  • WebAPI——cookie与session遇到的问题

    千次阅读 2017-02-08 20:42:12
    这两天要做一个用户登陆验证的接口,用MVC这种action和view结合的做的话比较好做,但是直接使用webapi做的过程遇到了不少困难,这里和大家分享一下== 一、WebAPI中session与cookie操作 由于两者用的框架不一样...
  • 介绍了在ASP.NET Web Api中使用Session、Cache和Application的两个方法,程序在VS2012和Firefox中测试通过。
  • WebAPI使用Session(转载)

    千次阅读 2018-09-05 15:48:04
    最近在改写WebApp时要将以前用泛型处理例程写的Captcha 改成使用WebApi 来实作机制,在实作的过程发现使用IRequiresSessionState session也无法使用(context.Session==null)   查过一些文章才发现需要在注册api...
  • 1. Spring Session 简介

    万次阅读 2019-08-27 16:15:26
    Spring session 是用来解决分布式环境下的... 不过笔者基本上没使用WebSession和WebSocket, 所以笔者只介绍HttpSession 的用法. 1. Spring Session 简介 spring session 提供了管理用户session信息的API和实现,...
  • Apache Shiro Web应用会话管理

    万次阅读 2013-01-25 16:51:58
    Web环境,Shiro默认的会话管理器SessionManager 的实现是ServletContainerSessionManager。这个实现只是简单的封装了Servlet容器,包括会话集群功能。它的本质是Shiro Session API与Servlet容器之间的一个...
  • 启用 mvc webapi 支持 session

    千次阅读 2015-09-29 16:19:36
    默认 mvc webapi 不开启 session 会话支持 所以需要修改配置,手动在 Global 开启 session 支持 如下: 1.重写 init() 方法  public override void Init()  {  //注册事件  this.AuthenticateRequest ...
  • WebApi中Session与Token间的处理对接

    千次阅读 2017-05-24 10:38:26
     session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。session 也是类似的道理,服务器要知道当前发请求给自己...
  • 在HttpHandler程序中使用Session时发现,报如题所示的错误,Google了一下,实现了IRequiresSessionState接口后解决了。
  • Spring Session解决Session共享

    万次阅读 多人点赞 2020-08-19 15:53:34
    前言 由于HTTP协议是无状态的协议,一次浏览器和服务器的交互过程就是一次会话,对话完成后,这次会话就结束了,服务器端并不...这个时候需要使用Cookie;每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服...
  • webApi——启用 session

    千次阅读 2016-11-09 08:44:02
    默认webapi 不开启 session 会话支持所以需要修改配置,手动在 Global 开启 session 支持 1.重写 init() 方法 2.开启session支持Global.asaxusing System; using System.Collections.Generic; using System.Linq; ...
  • spring boot之Spring session配置

    万次阅读 2020-09-23 08:48:37
    在传统单机web应用,一般使用tomcat/jetty等web容器时,用户的session都是由容器管理。浏览器使用cookiesessionId,容器根据sessionId判断用户是否存在会话session。这里的限制是,session存储在web容器,...
  • webapi mvc session一直获取不到问题

    千次阅读 2016-01-07 13:37:14
    前一段时间在给移动端写接口时遇到一个调用接口发送邮箱 session 一直获取不到的...大家都知道webapi默认是不开启session会话支持的。所以需要Global文件要重写方法如下:  public override void Init()  {  
1 2 3 4 5 ... 20
收藏数 132,318
精华内容 52,927
关键字:

webapi中使用session