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

Entradas populares de este blog

Configuración de Modo de estado de Sesión StateServer para aplicaciones ASP NET de alta disponibilidad

Hola a todos, el objetivo de este post es mostrar cómo se configura una aplicación para que soporte balanceo de carga y este alojado en una granja de servidores.  Con esto se quiere lograr que la aplicación sea de alta disponibilidad. Se necesita que la sesión persista a pesar de que se redireccione al usuario hacia otro servidor (recordar que estamos con un balanceador en una granja de servidores) o se reinicie la aplicación. Para esto en ASP .NET, ya sea web form o mvc la forma de poder manejar este caso es configurando el modo de estado de sesión fuera del proceso. ASP .NET tiene los siguientes modos de estado de sesión: ·          Modo InProc , que almacena el estado de sesión en memoria en el servidor Web. Éste es el valor predeterminado. ·          Modo StateServer , que almacena el estado de sesión en un proceso distinto denominado "servicio de estado de ASP.NET". Este modo garantiza que el estado de sesión se mantiene si se reinicia la aplicación Web y qu

Manejo de Caché en ASP NET MVC

Hola a todos, el objetivo de este post es aclarar ciertos puntos sobre el manejo de caché en ASP NET MVC. El manejo de la caché correctamente nos permite mejorar el rendimiento de nuestras aplicaciones, permitiéndonos almacenar información de uso frecuente y dentro de la memoria de alta velocidad. El manejo de la caché se puede dar tanto en el servidor como en el cliente. Este es un resumen de manejo de caché en ASP NET MVC: Page Output Caching: Es el manejo de caché a nivel de página o de acción en MVC. El navegador web puede almacenar en caché cualquier solicitud HTTP GET durante un periodo predefinido por lo que si el usuario solicita la misma URL, el navegador no llama al servidor, si no que carga la página desde la caché del navegador local. Te da la opción de decidir donde se va almacenar la página ya sea en el cliente o en el servidor. Solo se necesita decorar la acción con el atributo "OutputCache" e indicarle como se va a manejar: Duration (tiempo de durac

Inicio de sesión basado en tokens con Web Api

Hola a todos, el objetivo de este post será realizar el mecanismo de inicio de sesión basado en tokens para un servicio Rest Full con Web Api y Owin. Antes de empezar veamos un poco de teoría: Web Api:     Es un marco que facilita la creación de servicios HTTP disponibles para una amplia variedad de clientes, entre los que se incluyen exploradores y dispositivos móviles. ASP.NET Web API es la plataforma perfecta para crear aplicaciones RESTful en .NET Framework. Autenticación basada en Token: La forma preferida hoy en día para autenticarse desde el front-end ya sea web o mobile es la de tokens por las siguientes razones: Escalabilidad de servidores: El token que se envía al servidor es independiente, contiene toda la información necesaria para la autenticación del usuario, por lo que añadir más servidores a la granja es una tarea fácil ya que no depende de una sesión compartida. Bajo acoplamiento: Su aplicación front-end no se acopla con el mecanismo de autenticación