我正在使用$.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
为空,那么我可以在请求中看到ASP.NET_SessionId
标头。如果我使用$.post
发出请求,则HttpContext.Current.Session
出现。
问题是:通过$.ajax
发出请求有什么问题?为什么不提供HttpContext.Current
?我可以使用哪种最佳方法?现在想到的只是将文件转换为十六进制字符串,以便使用$.post
jquery版本为2.2.4