asp.net - net - ¿Es posible acceder a HttpContext.Current.Session desde Web API?
session variable web api c# (2)
¿Es posible acceder a HttpContext.Current.Session a través de una WebAPI? podemos hacerlo heredar IRequiresSession?
Tengo un controlador genérico haciendo un conjunto de sesión después de una llamada API que quiero eliminar.
public void AccountController : ApiController, IRequiresSessionState
{
public void Login()
{
setsession(){}
}
}
Lanzarlo como HttpContext no funcionó para mí usando Web Api 2.1. Sin embargo, podría usar HttpContextWrapper.
var context = Request.Properties["MS_HttpContext"] as HttpContextWrapper;
Técnicamente , sí, aunque realmente desaconsejo esta práctica, una API REST debería ser completamente apátrida (las cookies y otros estados del lado del cliente están bien).
Si es absolutamente necesario hacer esto, puede captar el contexto HTTP de esta manera:
var context = Request.Properties["MS_HttpContext"] as HttpContext;
En ese momento, solo usa su propiedad Session para obtener la sesión.
Tenga en cuenta que esto rompe ciertos contratos asumidos por System.Net.Http
, específicamente, significa que los controladores de su API nunca pueden ser auto alojados porque están acoplados a ASP.NET. Si está de acuerdo con esto, y con el hecho de que sus controladores de API pueden no funcionar correctamente desde una granja de servidores a menos que vuelva a diseñar todo para usar sesiones distribuidas, entonces, adelante.
PS También es posible usar IRequiresSessionState
, pero no puede usarlo en el controlador, necesita usarlo en un HttpControllerHandler
y configurarlo como RouteHandler
. El enfoque se analiza en este hilo de MSDN . De nuevo, no puedo recomendar lo suficiente contra esta idea, viola el principio básico de una API web, pero, si tiene una buena razón para ello, entonces es otra opción que es un poco más reutilizable.