HttpContext.Current является нулевым для $ .ajax - PullRequest
0 голосов
/ 05 декабря 2018

Я делаю запросы к тому же методу с $.post и $.ajax, и они дают действительно странные результаты.Начнем с того, что $.post работает нормально во всех отношениях, но теперь мне нужно отправить файл на ту же конечную точку, поэтому я переключился с $.post на $.ajax и с application/json на multipart/form-data

Проблема 1:

Я использую HttpContext.Current в пределах наследника System.Web.Http.ApiController, и это зависит от того, какое значение предоставлено в Content-Type заголовке запроса.HttpContext.Current == null при отправке multipart/form-data и нормально при отправке application/json.Код для решения этой проблемы:

if (HttpContext.Current == null)
{
    httpContextWrapper = httpRequest?.Properties["MS_HttpContext"] as HttpContextWrapper;
}
else
{
    httpContextWrapper = new HttpContextWrapper(HttpContext.Current);
}

Однако мне нужно получить состояние сеанса из этого контекста (я знаю, REST отклоняет состояние, но у нас это так), и тут возникает другая проблема

Проблема 2:

Если я извлекаю контекст из HttpRequestMessage.Properties (что означает, что я делаю запрос через $.ajax) httpContextWrapper.Session имеет значение null, тем не менее, я вижу заголовок ASP.NET_SessionId в запросе.Если я делаю запрос, используя $.post HttpContext.Current.Session.

Вопрос: в чем проблема с отправкой запросов через $.ajax, почему он не предоставляет HttpContext.Current и какой лучший подход я могуиспользовать?Теперь на ум приходит только преобразование файла в шестнадцатеричную строку, чтобы опубликовать его в формате JSON с использованием $.post

jquery версии 2.2.4

watch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...