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

问题描述 投票:0回答:1

当从JS发出请求时,先前设置的控制器会话值丢失。我该如何预防呢? var实例Id下面返回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只是对所述控制器操作的标准提取。

c# .net asp.net-core
1个回答
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
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.