Accessing Session Using ASP.NET Web API

前端 未结 13 1138
谎友^
谎友^ 2020-11-22 04:32

I realize session and REST don\'t exactly go hand in hand but is it not possible to access session state using the new Web API? HttpContext.Current.Session is a

13条回答
  •  梦如初夏
    2020-11-22 05:16

    You can access session state using a custom RouteHandler.

    // In global.asax
    public class MvcApp : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var route = routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            route.RouteHandler = new MyHttpControllerRouteHandler();
        }
    }
    
    // Create two new classes
    public class MyHttpControllerHandler
        : HttpControllerHandler, IRequiresSessionState
    {
        public MyHttpControllerHandler(RouteData routeData) : base(routeData)
        { }
    }
    public class MyHttpControllerRouteHandler : HttpControllerRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(
            RequestContext requestContext)
        {
            return new MyHttpControllerHandler(requestContext.RouteData);
        }
    }
    
    // Now Session is visible in your Web API
    public class ValuesController : ApiController
    {
        public string Get(string input)
        {
            var session = HttpContext.Current.Session;
            if (session != null)
            {
                if (session["Time"] == null)
                    session["Time"] = DateTime.Now;
                return "Session Time: " + session["Time"] + input;
            }
            return "Session is not availabe" + input;
        }
    }
    

    Found here: http://techhasnoboundary.blogspot.com/2012/03/mvc-4-web-api-access-session.html

提交回复
热议问题