Добавить пользовательский класс В HttpContext
В a ASP.NET проект MVC C#:
В настоящее время я использую HttpContext.Элементы для хранения свойства, которое должно использоваться везде в этом запросе. Вот что у меня есть в контроллере:
HttpContext.Items["IUser"] = new CustomClass(“parameter”);
Это отлично работает для получения в представлении, так как я переопределяю веб-страницу по умолчанию, как это в веб-представлении.конфигурационный файл:
<pages pageBaseType="Project.CustomWebViewPage">
внутри CustomWebViewPage я создаю свойство и устанавливаю его в методе InitHelpers (), например это:
IUser = (CustomClass)HttpContext.Current.Items["IUser"];
однако, если я хочу получить его в своих моделях / ViewModels, мне придется поместить этот фрагмент кода повсюду, и поэтому я подумал о создании CustomClass непосредственно внутри HttpContext (поэтому мне, по крайней мере, не придется печатать), но я не могу найти, как переопределить или динамически добавить этот объект к нему.
2 ответов
вы можете создать метод расширения. Что-то вроде этого:--3-->
public static class HttpContextExtensions
{
public static CustomClass GetUser(this HttpContextBase context)
{
return (CustomClass)context.Items["IUser"];
}
}
тогда вы назовете это так:
var user = HttpContext.Current.GetUser();
недавно я столкнулся с подобной проблемой. Хотя я работал с WebForms, мое решение также должно применяться к MVC.
Я создал новый объект для доступа к слоям Dal / бизнес-логики для каждого запроса. Это позволяет мне вносить изменения в логику, независимо от того, сколько времени занимает запрос или выполняется несколько запросов одновременно. Также это позволило обеспечить утилизацию моего объекта, когда запрос закончился.
моей первой мыслью было создать пользовательский реализация HttpContextBase
, но я не мог найти никакого способа перезаписать создание HttpContext
для запроса.
Итак, наконец я представил метод расширения, который инкапсулирует всю логику:
public static class HttpContextExtensions
{
public static CustomClass GetIUser(this HttpContextBase Context)
{
return Context.Items["IUser"] as CustomClass;
}
}
теперь ваш код упрощается до:
var user = Request.RequestContext.HttpContext.GetIUser();