Должен ли я использовать среду 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, позволяет мне полагать, что коллекция свойств на объект запроса - путь. Как я могу получить доступ к этому объекту из промежуточного программного обеспечения?
Ответы
Ответ 1
Словарь среды OWIN может использоваться для хранения данных для запроса. Свойство свойств объекта запроса можно использовать для того, чтобы сделать то же самое.
Основное отличие заключается в том, что словарь среды OWIN является концепцией OWIN и применим к любому промежуточному программному обеспечению, запущенному на хосте OWIN. Свойство свойств объекта запроса является концепцией веб-API ASP.NET и применимо только к этой конкретной структуре.
Кстати, ASP.NET Web API сам работает как промежуточное ПО в конвейере OWIN. Таким образом, чтобы ответить на ваш вопрос, вы не можете получить доступ к коллекции свойств API-интерфейса запроса из вашего промежуточного программного обеспечения, поскольку он применим только к промежуточному программному обеспечению Web API (или к этой конкретной структуре).
Если вы хотите написать свою сквозную информацию о концерне как промежуточное ПО OWIN, вы должны использовать словарь среды OWIN. Если расширение веб-API указывает на то, что фильтр или обработчик сообщений в порядке, то вы можете использовать коллекцию свойств.
Очевидно, что все, что вы пишете с использованием точек расширения веб-API, применимо только к веб-API, тогда как промежуточное ПО OWIN применимо к любому типу приложения, работающему в конвейере OWIN и включающему веб-API.