#asp.net-web-api
#asp.net-web-api
Вопрос:
У меня есть серия вызовов веб-API, все из которых будут иметь идентификатор клиента в качестве атрибута для вызова — это многопользовательская ситуация. Я не возражаю против наличия идентификатора клиента во всех моих маршрутах, но я не хочу, чтобы он использовался в каждом вызове, и я определенно не хочу, чтобы код обрабатывал его в каждом вызове.
Кроме того, к данным необходимо получить доступ из статического объекта несколькими уровнями ниже в стеке. Я пытался использовать состояние сеанса в качестве хранилища для этого, но, похоже, оно недоступно на этапе, когда мне нужно перехватить вызов, т. Е. На этапе ActionFilter или MessageHandler. Объект сеанса в любом случае никогда не казался подходящим местом для этих данных.
Итак, мой вопрос — в режиме жизненного цикла веб-API есть ли хранилище, которое я могу использовать, которое является статичным для запроса? Если есть, я могу перехватить вызов в фильтре действий, записать в это хранилище, а затем прочитать из него позже.
TIA.
Ответ №1:
Вы могли бы использовать Properties
свойство HttpRequestMessage
объекта для хранения информации, относящейся к текущему запросу.
//
// Summary:
// Gets a set of properties for the HTTP request.
//
// Returns:
// Returns System.Collections.Generic.IDictionary<TKey,TValue>.
public IDictionary<string, object> Properties { get; }
Комментарии:
1. Да, это сработало. Я смог получить доступ к текущему запросу статически с помощью этого кода: HttpContext.Current. Элементы[«MS_HttpRequestMessage»] как HttpRequestMessage — теперь работает от начала до конца.