在从JS获取获取请求时,会话在.Net核心中丢失

时间:2018-05-18 07:21:51

标签: c# .net asp.net-core

当从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只是对所述控制器操作的标准提取。

1 个答案:

答案 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
    }
});