2012. november 30., péntek

MVC4 webAPI Session hogyan

WEBAPI esetén MS elspórolta a Session létrehozását és kezelését alapesetben. Van rá mód, hogy legyen Sessionünk, csak egy marker interface kell hozzá:

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