Ответ 1
Технически, да, хотя я бы действительно советовал против этой практики - API REST должен быть полностью без гражданства (файлы cookie и другое клиентское состояние в порядке).
Если вы абсолютно должны это сделать, вы можете захватить HTTP-контекст так:
var context = Request.Properties["MS_HttpContext"] as HttpContext;
В этот момент вы просто используете свойство Session, чтобы получить сеанс.
Обратите внимание, что это нарушает определенные контракты, принятые System.Net.Http
- в частности, это означает, что ваши контроллеры API никогда не могут быть самообслуживаемыми, потому что они связаны с ASP.NET. Если вы в порядке с этим и с тем фактом, что ваши контроллеры API могут не работать должным образом из веб-фермы, если вы не перепроектируете все, чтобы использовать распределенные сеансы - ну, идите на это.
P.S. Также возможно использовать IRequiresSessionState
, но вы не можете использовать его на самом контроллере, вам нужно использовать его на HttpControllerHandler
и установить его как RouteHandler
. Этот подход обсуждается в этом потоке MSDN. Опять же, я не могу рекомендовать достаточно сильную против эту идею, она нарушает основной принцип веб-API, но, если у вас есть повод для этого, это еще один вариант, который немного более многоразового использования.