[MVC 4] Activar Session en WebAPI

La WebAPI de ASP NET trae por defecto la sesión desactivada, debido a que es considerado una mala práctica para este tipo de proyectos.

Para habilitarla, hay que hacer lo siguiente:

  1. Agregar las clases MyHttpControllerHandler MyHttpControllerRouteHandler.
  2. Agregar el using "using System.Web.Routing;"
  3. Dentro de WebApiConfig reemplazar: "config.Routes.MapHttpRoute" por "var route = config.Routes.MapHttpRoute".
  4. Luego al final agregamos "route.RouteHandler = new MyHttpControllerRouteHandler();".
A continuación el código de las clases:

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

namespace MyProject
{
    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);
        }
    }
}

Ya con eso la sesión se encontrará habilitada.

Aquí dejo también el código de WebApiConfig por si no quedó claro:

using System.Web;
using System.Linq;
using System.Web.Http;
using System.Web.Routing;
using Bencsharp.Mvc.App_Start;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var route = RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        route.RouteHandler = new MyHttpControllerRouteHandler();

        config.EnableQuerySupport();            
    }
}

Bueno, eso fue todo.

Saludos!

Comentarios

Entradas populares de este blog

Ordenar lista en python - Super fácil!