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.
Hola. Me sirve en localhost. Pero cuando lo público en iis no lee la variable sesión. Help me please.
ResponderEliminarHola, desde donde lo estas accediendo? desde una web o mobile?
ResponderEliminarweb
ResponderEliminarSi 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