Подтвердить что ты не робот

Должен ли я использовать среду OwinContext для хранения данных конкретных приложений для каждого запроса

Мне нужен способ хранения объекта регистрации на запрос. С HttpContext я бы добавил это в словарь статей. Я не хочу приводить HttpContext в это, если могу помочь. Ниже приведен код, который я предлагаю для Unity LifeTimeManager, который будет хранить объекты в свойстве OwinContext Environment, к которым у меня есть доступ с моим промежуточным программным обеспечением Owin.

public class OwinContextLifetimeManager : LifetimeManager
{
    private string key = (new Guid()).ToString();
    private IDictionary<string, object> environment;

    public OwinContextLifetimeManager(IDictionary<string, object> environment)
    {
        this.environment = environment;
    }

    public override object GetValue()
    {
        if (environment != null && environment.ContainsKey(key))
            return environment[key];
        else
            return null;
    }

    public override void RemoveValue()
    {
        if (environment != null)
            environment.Remove(key);
    }

    public override void SetValue(object newValue)
    {
        if (environment != null)
            environment[key] = newValue;
    }
}

Затем я могу использовать его как это из моего промежуточного ПО:

container.RegisterType<IRequestLog, RequestLog>(new OwinContextLifetimeManager(environment));

Мне кажется, что я могу выбрать любой ключ, который я хочу, кроме тех, которые уже зарезервированы Owin. Есть ли какая-то причина, по которой я не должен использовать OwinContext.Environment для этой цели? Документация MSDN неясна в отношении лучших практик этого.

Ответ Darrel Miller здесь: Как хранить данные для каждого запроса при использовании OWIN для Self-Host ASP.NET Web API, позволяет мне полагать, что коллекция свойств на объект запроса - путь. Как я могу получить доступ к этому объекту из промежуточного программного обеспечения?

4b9b3361

Ответ 1

Словарь среды OWIN может использоваться для хранения данных для запроса. Свойство свойств объекта запроса можно использовать для того, чтобы сделать то же самое.

Основное отличие заключается в том, что словарь среды OWIN является концепцией OWIN и применим к любому промежуточному программному обеспечению, запущенному на хосте OWIN. Свойство свойств объекта запроса является концепцией веб-API ASP.NET и применимо только к этой конкретной структуре.

Кстати, ASP.NET Web API сам работает как промежуточное ПО в конвейере OWIN. Таким образом, чтобы ответить на ваш вопрос, вы не можете получить доступ к коллекции свойств API-интерфейса запроса из вашего промежуточного программного обеспечения, поскольку он применим только к промежуточному программному обеспечению Web API (или к этой конкретной структуре).

Если вы хотите написать свою сквозную информацию о концерне как промежуточное ПО OWIN, вы должны использовать словарь среды OWIN. Если расширение веб-API указывает на то, что фильтр или обработчик сообщений в порядке, то вы можете использовать коллекцию свойств.

Очевидно, что все, что вы пишете с использованием точек расширения веб-API, применимо только к веб-API, тогда как промежуточное ПО OWIN применимо к любому типу приложения, работающему в конвейере OWIN и включающему веб-API.