form - ¿Cómo acceder a HttpContext fuera de los controladores en ASP.NET MVC?
mvc.net core form (4)
Debe importar el ensamblado System.Web en su código y luego puede hacer algo como esto:
HttpContext context = HttpContext.Current;
return (User)context.Session["User"];
Edición:
Amigo, hice algunas pruebas aquí y me funciona, intenta algo como esto:
Cree una clase auxiliar para encapsular que obtiene cosas de las variables de sesión, debe importar el ensamblado System.Web:
public class TextService
{
public static string Message {
get
{
HttpContext context = HttpContext.Current;
return (string)context.Session["msg"];
}
set
{
HttpContext context = HttpContext.Current;
context.Session["msg"] = value;
}
}
}
Entonces en tu controlador deberías hacer algo como:
TextService.Message = "testing the whole thing";
return Redirect("/home/testing.myapp");
Y en tus otras clases puedes llamar a la clase de ayuda:
return TextService.Message;
Darle una oportunidad.
Específicamente, las variables de sesión. Tengo un .ashx en mi proyecto ASP.NET MVC que está extrayendo algunos datos de imagen para mostrarlos a un usuario, y necesito poder acceder a un objeto que he almacenado en la sesión. Desde los controladores puedo sacar bien el objeto, pero en mi página ashx, el contexto. La sesión es nula. ¿Alguna idea? ¡Gracias!
Aquí hay un ejemplo de lo que estoy tratando de hacer ... contexto. La sesión siempre devuelve nulo.
private byte[] getIconData(string icon)
{
//returns the icon file
HttpContext context = HttpContext.Current;
byte[] buffer = null;
//get icon data
if ( context.Session["tokens"] != null)
{
//do some stuff to get icon data
}
}
En .Net Core, la mejor forma de acceder a HTTPContext fuera del controlador es usar IHttpContextAccessor. Usando DI podemos acceder, por ejemplo, a objetos User / HttpContext como _httpContextAccessor.HttpContext.User y _httpContextAccessor.HttpContext.HttpContext. Para una respuesta detallada por favor consulte este link . ¡Gracias!
Ok, entonces, lo que terminé por hacer ... en mi archivo ashx, lo agregué en la interfaz IReadOnlySessionState y accederé al estado de la sesión muy bien. Así que se ve algo como esto ...
public class getIcon : IHttpHandler, IReadOnlySessionState
Para salvar a cualquiera la excavación, para .net core 2.1+:
Agregue lo siguiente a los servicios de configuración públicos vacíos (...) en su Startup.cs:
services.AddHttpContextAccessor();
Use inyectando en su servicio / etc:
public MyService(IHttpContextAccessor httpContextAccessor) { //... }
Gracias a: https://adamstorr.azurewebsites.net/blog/are-you-registering-ihttpcontextaccessor-correctly