当从JS发出请求时,先前设置的控制器会话值丢失。我该如何预防呢? var instId下面返回null。
[AllowAnonymous]
public JsonResult GetEmails()
{
var instanceId = HttpContext.Session.GetString("instanceId");
HttpContext.Items.Add("instanceId", instanceId);
var result = someapicall;
var returnObj = JsonConvert.SerializeObject(result);
return Json(returnObj);
}
JS只是对所述控制器操作的标准提取。
答案 0 :(得分:4)
您的JavaScript fetch
- 请求是否随之发送ASP.NET Core Cookie?会话状态使用cookie来跟踪和标识请求并加载正确的数据。如果请求未发送cookie,则无法确定请求与哪个会话相关联。
有关ASP.NET Core中会话状态的详细信息,请参阅the documentation。
修改强>
为了完整性:解决方案是为credentials: true
添加fetch
- 请求,以便它将cookie与请求一起发送。例如:
{ method: 'GET', credentials: 'include' }
对于AJAX请求,您应该添加withCredentials
属性,其目的相同:
$.ajax({
url: '/some/url',
// ...
xhrFields: {
withCredentials: true
}
});
或者为所有请求全局设置:
$.ajaxSetup({
// ...
xhrFields: {
withCredentials: true
}
});