Как получить доступ к HttpContext за пределами контроллеров в ASP.NET MVC?
В частности, переменные сеанса. У меня есть .ashx в моем проекте ASP.NET MVC, который тянет некоторые данные изображения для отображения пользователю, и мне нужно иметь доступ к объекту, который я сохранил в сеансе. Из контроллеров я могу потянуть объект в порядке, но на моей странице ashx контекст. Сессия равна null. Есть предположения? Спасибо!
Вот пример того, что я пытаюсь сделать... context.Session всегда возвращает null.
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
}
}
Ответы
Ответ 1
Хорошо, так что мне все-таки пришлось делать.... в моем файле ashx, я добавил в интерфейс IReadOnlySessionState, и он будет очень просто получать доступ к состоянию сеанса. Итак, это выглядит примерно так...
public class getIcon : IHttpHandler, IReadOnlySessionState
Ответ 2
Вы должны импортировать сборку System.Web в свой код, а затем вы можете сделать что-то вроде этого:
HttpContext context = HttpContext.Current;
return (User)context.Session["User"];
Редактирование:
Чувак, я сделал несколько тестов здесь, и это работает для меня, попробуйте что-то вроде этого:
Создайте вспомогательный класс, чтобы инкапсулировать вас, получая файлы переменных сеанса, он должен импортировать сборку 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;
}
}
}
Затем в вашем контроллере вы должны сделать что-то вроде:
TextService.Message = "testing the whole thing";
return Redirect("/home/testing.myapp");
И в других классах вы можете вызвать вспомогательный класс:
return TextService.Message;
Попробуйте.