Ha az ASP.NET MVC Controllert ControllerBase alaposztály szerint használjuk a már megszokott módon lesz Session-ünk a HttpContext-ben, amit a következőképpen lehet elérni:
HttpContext.Current.Session
Azonban ha MVC API-t használunk ami az ApiController osztályból származik, alapesetben nincs session-ünk.
Ahhoz, hogy legyen a következő lépéseket kell megtenni:
1. Saját SessionControllerHandler osztály létrehozása a HttpControllerHandler és az IRequiresSessionState Marker Interface leszármazásával:
public class SessionControllerHandler : HttpControllerHandler, IRequiresSessionState
{
public SessionControllerHandler(RouteData routeData)
: base(routeData)
{ }
}
A Marker Interface (IRequiresSessionState) fogja jelezni a Framework-nek, hogy létre kell hoznia a Session-t az eléréséhez.
2. SessionRouteHandler osztály létrehozása, amely az IRouteHandler interfészt valósítja meg
public class SessionRouteHandler : IRouteHandler
{
IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
{
return new SessionControllerHandler(requestContext.RouteData);
}
}
3. Az előbbiek tényleges használata a route tábla létrehozásánál:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
).RouteHandler = new SessionRouteHandler();
A megoldásról többet a következő oldalon olvashatsz:
Nincsenek megjegyzések:
Megjegyzés küldése