WebApi Session支持

代码:

WebApiConfig

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using System.Configuration;
using Microsoft.Owin.Security.OAuth;
using Newtonsoft.Json.Serialization;

using System.Web.Http.Cors;
using System.Web.Http.WebHost;
using System.Web.SessionState;
using System.Web.Routing;
using System.Web;

namespace WorkOrderManage.API
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
            // 将 Web API 配置为仅使用不记名令牌身份验证。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            //// Web API 路由
            //config.MapHttpAttributeRoutes();

            //config.Routes.MapHttpRoute(
            //    name: "DefaultApi",
            //    routeTemplate: "api/{controller}/{action}/{id}",
            //    defaults: new { id = RouteParameter.Optional, namespaceName = "WorkOrderManage.API.Controllers" }
            //);

          // 全局里面已经有了,如果添加这个路由,那么全局里面的就会无效
          //  config.Routes.MapHttpRoute(
          //    name: "Admin Area Default",
          //    routeTemplate: "api/admin/{controller}/{action}/{id}",
          //    defaults: new { id = RouteParameter.Optional, namespaceName = "WorkOrderManage.API.Areas.Admin.Controllers" }
          //);

        }
    }

    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);
        }
    }

}

添加下面的两个类,注释掉里面的路由,在全局里面添加路由

Global.asax

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.SessionState;
using WorkOrderManage.API.Utility;

namespace WorkOrderManage.API
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            var jsonFormatter = new JsonMediaTypeFormatter();
            GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

            RouteTable.Routes.MapHttpRoute(
               name: "Admin Area Default",
               routeTemplate: "api/admin/{controller}/{action}/{id}",
               defaults: new { id = RouteParameter.Optional, namespaceName = "WorkOrderManage.API.Areas.Admin.Controllers" }
            ).RouteHandler = new SessionControllerRouteHandler();

            RouteTable.Routes.MapHttpRoute(
             name: "Email Area Default",
             routeTemplate: "api/email/{controller}/{action}/{id}",
             defaults: new { id = RouteParameter.Optional, namespaceName = "WorkOrderManage.API.Areas.Email.Controllers" }
          ).RouteHandler = new SessionControllerRouteHandler();

        }

        public override void Init()
        {
            PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
            base.Init();
        }

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

    }
}

在这个里面添加路由

不能在全局里添加路由,又在webapiconfig里面添加一个同名的路由

http://www.cnblogs.com/firstcsharp/p/4482835.html

时间: 2024-12-17 17:06:20

WebApi Session支持的相关文章

Web API 开启Session支持

Web API中默认是没有开启Session支持的,开启Session支持,需要进行以下操作,以下操作分两种,都是在Global.asax文件中添加代码的. 这时要在Global.asax里添加如下代码,开启Session功能(重写Init方法) /// <summary> /// 开启WebAPI中的Session支持 /// </summary> public override void Init() { this.PostAuthenticateRequest += (sen

WebApi 能支持Session

由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验. 然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asax的Init方法 public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { GlobalConfiguration.Configuration.EnableCo

WebAPI CORS 支持跨域POST

网上一般能找到的都是通过Microsoft.AspNet.WebApi.Cors来实现CORS,这是通过dll的方式,然后还有一种是通过config的方式 1.dll方式实现CORS 这种方式的好处就是控制精细,可以对同一个站点下的action分别赋予不同的CORS设置,具体怎么实现这里就不多说了,不了解的可以看http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-05.html 然后这里记录下实际可能会出现的问题 a) System.We

用 memcached 实现 Tornado 的 session 支持(一)

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session.光会用可不行啊,让我们看看是怎么写的~ 项目地址:tornado-memcached-sessions 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的

用 memcached 实现 Tornado 的 session 支持(二)

客官您终于回头了!让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看需要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用就行了...) hmac 和 hashlib 用于生成加密字符串 uuid 用于生成一个唯一 id memcache  Python 的 memcache 客户端 这里面有三个类,SessionData Session 和 SessionManager.先看最简单的 SessionData. Sessi

WebAPI HelpPage支持area

开篇:对于WebApi研究不是很深,刚开始使用,记录自己的解决思路,有更好的处理方式或发现我对WebApi理解有不对的地方恳请指正,谢谢! 环境:WebAPI服务.HelpPage,API路由:"api/{controller}/{action}",服务与helpPage运行正常,帮助文档页面所有API地址遵循路由格式 问题描述:当两个area下出现同名的controller/action时,生成的帮助文档页面API地址会一模一样,请求出错 解决思路:将路由定义为"api/{

用 memcached 实现 Tornado 的 session 支持(三)

童鞋,我就知道你是个好学滴好孩子-来吧,让我们进行最后的探(zuo)索(si)! 上一次我们讲到哪里?哦...准备讲 SessionManager 是吧,来-一个一个函数看- 首先是初始化,设置密钥, memcache 地址,session 超时时间. # 初始化需要一个用于 session 加密的 secret, memcache 地址, session 的过期时间 def __init__(self, secret, memcached_address, session_timeout):

【源代码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(二)

客官您最终回头了! 让我们本着探(zuo)索(si)精神把 session.py 看完吧... 首先看看须要的库: pickle 一个用于序列化反序列化的库(听不懂?你直接看成和 json 一样作用即可了...) hmac 和 hashlib 用于生成加密字符串 uuid 用于生成一个唯一 id memcache  Python 的 memcache client 这里面有三个类.SessionData Session 和 SessionManager. 先看最简单的 SessionData.

IIS7.5 webapi 不支持 Delete、Put 解决方法

在IIS管理界面选择API的项目,选择 “Features View”. 2.  选择 “Handler Mappings” 菜单. 3. 打开“WebDAV” 选项. 4. 点击 “Request Restrictions” 选项. 5. 选择 “Vebs” 菜单项,选 “All verbs”,保存即可. 这样设置IIS 就支持 Delete 和 Put,你可以不全部放开,放开部分的方法也是可以的.