Я делаю запросы к тому же методу с $.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
