我可以在 ASP MVC 中中途取消控制器请求吗?



我对ASP MVC很陌生

我有一个用户可以选择的菜单选项列表。每个菜单选择都会根据 MVC 架构触发一个控制器。

但不幸的是,其中一些控制器需要一些时间来执行才能做出可见的更改。因为大数据需要绑定到网格。所以浏览器一直挂起(显示加载)。

如果用户在一个耗时的菜单选项之后选择一个可以轻松加载的选项,则会发生最坏的情况。

有人可以帮助解决如何在一个控制器操作请求进入时关闭另一个控制器操作请求吗?现在它是所有用户选择的操作的总和

例如:如果用户选择菜单 1 并在该菜单 2 之后。我的 Menu1 控制器操作需要一些时间来执行。到那时,用户单击Menu2,如果第一次单击,则可以轻松加载。但是由于单击了Menu2,因此用户必须等待很长时间。

这有点旧,但无论如何我都会尝试回答,因为我最近遇到了这个问题。如果您使用的是 MVC 5,则可以为您取消其他请求。诀窍是使用异步控制器操作并添加 CancelToken 参数。

public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
    List<ReportItem> items;
    using (ApplicationDbContext context = new ApplicationDbContext())
    {
        items = await context.ReportItems.ToListAsync(cancellationToken);
    }
    return View(items);
}

当用户导航到另一个页面时,请求将被取消。MVC 将向取消令牌发出请求已取消的信号。只要您还像我上面所做的那样将取消令牌传递给异步数据访问方法,查询将被取消,服务器将立即停止处理请求。

我在这里整理了一个完整的解释:http://www.davepaquette.com/archive/2015/07/19/cancelling-long-running-queries-in-asp-net-mvc-and-web-api.aspx

最新更新