Добавить пользовательский класс В 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();