Ir al contenido principal

¿Cómo acceder a la sesión desde Web Api?

En esta ocasión les mostrare una solución para acceder a la sesión desde una controladora Web Api.
Primero revisamos el archivo WebApiConfig.cs y en mi caso encontramos lo siguiente:
public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "webApi",
                routeTemplate: "webApi/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
                      
        }
Vemos que en el mapeo de ruta, la propiedad routeTemplate tiene como inicio “WebApi”, esto indica que las llamadas a controladoras web api las url empezarán con “WebApi”.
Una vez identificado el routeTemplate, nos dirigimos al Global.asax de nuestro proyecto, en mi caso un proyecto web MVC5 y agregamos lo siguiente:
protected void Application_PostAuthorizeRequest()
{
       if (IsWebApiRequest())
       {
             HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
        }
 }
private bool IsWebApiRequest()
{
    return (HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath
                .StartsWith(“WebApi”) ||
                HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath
                .StartsWith(“~/WebApi”))
}
Ahora ya podras acceder a la sesion desde tu controladora web api:
public Usuario DevuelveUsuario()
{
  return HttpContext.Current.Session[“_Usuario”] as Usuario;
}


Espero les sirva, gracias.

Comentarios

  1. Hola. Me sirve en localhost. Pero cuando lo público en iis no lee la variable sesión. Help me please.

    ResponderEliminar
  2. Hola, desde donde lo estas accediendo? desde una web o mobile?

    ResponderEliminar
  3. Respuestas
    1. Si esta en el mismo dominio va poder acceder a la sesión pero si esta en diferente dominio no se puede, en ese caso tendrías que manejar las sesiones con un mecanismo de token (oauth2).

      Eliminar

Publicar un comentario