There were a few answers available on the web but none of them worked correctly for me in MVC 5. The one that did was found in the book ASP.NET Web API 2 Recipes: A Problem-Solution Approach.
Create two classes; SessionControllerHandler and SessionHttpControllerRouteHandler. Implement as follows:
public class SessionControllerHandler : HttpControllerHandler, IRequiresSessionState{ public SessionControllerHandler(RouteData routeData) : base(routeData) { }}public class SessionHttpControllerRouteHandler : HttpControllerRouteHandler{ protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { return new SessionControllerHandler(requestContext.RouteData); }}
In your WebApiConfig, add the following above your route declaration(s):
public static void Register(HttpConfiguration config)
{
var httpControllerRouteHandler = typeof(HttpControllerRouteHandler).GetField("_instance",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
if (httpControllerRouteHandler != null)
{
httpControllerRouteHandler.SetValue(null,
new Lazy<HttpControllerRouteHandler>(() => new SessionHttpControllerRouteHandler(), true));
}
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
You will now find that any functions accessed through a Web API action will have access to read and write to session.
HttpContext.Current.Session["User"]="Talukdar";
string user=HttpContext.Current.Session["User"].ToString();
No comments:
Post a Comment