Что я могу использовать в качестве хранилища веб-API для статических данных запроса?

#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 — теперь работает от начала до конца.