小编Mat*_*tty的帖子

ASP.NET会话被覆盖

我遇到的情况是两个调用同时写入会话(在旧框架上运行的asp.net核心应用程序),其中一个会话变量被覆盖.

给定以下控制器代码,假设首先调用长会话,200 ms后调用短会话,800 ms后(当长会话完成时)调用两个会话的结果.

[HttpPost("[action]")]
public async Task<IActionResult> TestLongSession() {
    HttpContext.Session.SetString("testb", "true");

    // If we do this delay BEFORE the session ("testb") is set, then all is fine.
    await Task.Delay(1000);

    return Ok();
}

[HttpPost("[action]")]
public async Task<IActionResult> TestShortSession() {
    HttpContext.Session.SetString("testa", "true");

    return Ok();
}

[HttpGet("[action]")]
public async Task<IActionResult> TestResultOfBothSessions() {
    string a = HttpContext.Session.GetString("testa");
    string b = HttpContext.Session.GetString("testb");

    return Ok($"A: {a}, B: {b}");
}
Run Code Online (Sandbox Code Playgroud)

最终调用的结果(TestBothSessions)是"A: , B: true".

问题是:是否有一些我错过的会议工作(又名,返回"A: true, B: true")?

显然,我可以删除延迟,一切都很好,但在实际应用程序中有一个可能需要一些时间的调用,我不想在以后编写会话变量(我想我可以用一些自定义错误处理,但问题仍然存在,我不再相信asp.net会话使用同步调用).

编辑:从浏览器调用这些端点的打字稿代码: …

c# asp.net

6
推荐指数
1
解决办法
135
查看次数

标签 统计

asp.net ×1

c# ×1