如何在不等待第一个在 asp.net mvc 中完成的情况下调用第二个 ActionResult

问题描述

我有两个 ActionResults,我使用 Ajax 请求 (async:true) 连续调用它们。问题是,虽然第二个 ActionResult 由 Ajax 调用,但在第一个 ActionResult 完成之前不会命中控制器。 我不想等待第一个 ActionResult 完成。有什么解决办法吗?

function FuncOne(){
  $.ajax({
    url:'/report/ActionOne',type:'post',async:true,success:function(result){
    }
  })
}
function FuncTwo(){
  $.ajax({
    url:'/report/ActionTwo',success:function(result){
    }
  })
}

FuncOne()
FuncTwo()

ActionOne 和 ActionTwo 都是 (public async Task<ActionResult> ActionResultName)...

解决方法

终于找到问题所在了。它是 SessionState 限制。如您所知,我们可以在 Asp.net mvc 的 Session 中存储和重用任何数据。现在基于 Microsoft 文档,当我们在控制器中使用 Session 时,为了响应正确的请求,.Net 会阻止对同一控制器的异步请求。所以第二个请求必须等待第一个请求完成。解决办法是将async Controller分开,在其顶部添加如下标签:

 [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

在此控制器中,您无法添加或编辑会话数据。