Как читать ASP.NET_SessionId в контроллерах Web API? - PullRequest
0 голосов
/ 08 ноября 2019

У нас есть устаревший проект ASP.NET WebForms, который я пытаюсь модернизировать с помощью веб-API вместо традиционной статики [WebMethod] в Code-Behind (потому что он так ограничен).

ОднакоЯ также хотел иметь возможность читать файл cookie сеанса в веб-API. Раньше я мог прочитать его в Code-Behind, открыв HttpContext.Current.Session["NAME_OF_COOKIE_HERE"] и затем приведя его к модели - я не знаю, как это сделать с помощью веб-API.

Я использую axios дляпоговорите с моими контроллерами Web API.

Я добавил withCredentials: true в свою конфигурацию axios, но как мне двигаться дальше? Как именно вы можете прочитать cookie сессии в контроллерах Web API?

Вот пример:

// Client for testing
axios.get(API_ENDPOINT_URL_HERE, {withCredentials: true}).then(res => res).catch(err => err);
// Web API Controller
[Route(API_ENDPOINT_URL_ACCESSIBLE_BY_THE_CLIENT_TESTING)]
[HttpGet]
public IHttpActionResult SOME_FUNCTION_NAME() {
  var currentUser = // I don't know what to do from here on.
}

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Вы можете прочитать cookie, как любое другое свойство заголовка в httpRequestMessage, с помощью HttpRequestMessage.Headers. Пожалуйста, перейдите по ссылке с правильной реализацией WebAPI: получение значений заголовков, QueryString и Cookie Также обратите внимание, что если вы ожидаете кукив запросе затем используйте ключ заголовка «Cookie», и если вы делаете api-вызов rest и пытаетесь найти cookie в ответе, тогда используйте «Set-Cookie»

0 голосов
/ 09 ноября 2019

Ответ находится по этой ссылке: Сеанс ASP.NET Web API или что-то еще?

В частности, добавьте следующее в Global.asax.cs

public override void Init()
{
    this.PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest;
    base.Init();
}

void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
{
    System.Web.HttpContext.Current.SetSessionStateBehavior(
        SessionStateBehavior.Required);
}
...