You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在客户端中止请求时取消ASP.Net Core 6.0 Web API服务端任务?

解决ASP.NET Core 6.0中客户端取消请求时RequestAborted不触发的问题

核心问题分析

你遇到的HttpContext.RequestAborted.IsCancellationRequested始终为false的情况,通常是客户端取消信号未正确传递到服务端,或者服务端监听逻辑存在问题。以下是针对性的解决步骤:

1. 确保客户端AbortSignal正确绑定到请求

如果使用Fetch API的AbortController,必须将Signal正确关联到请求实例,且取消时调用abort():

// 创建AbortController实例
const abortController = new AbortController();
const { signal } = abortController;

// 发起请求时传入signal参数
fetch('/api/long-operation', {
  method: 'GET',
  signal: signal
})
.then(res => res.json())
.catch(err => {
  if (err.name === 'AbortError') {
    console.log('请求已手动取消');
  }
});

// 触发取消(比如用户点击按钮时)
document.getElementById('cancel-btn').addEventListener('click', () => {
  abortController.abort();
});

注意:如果是使用SignalR而非普通Fetch请求,需要用SignalR自身的连接停止机制(如hubConnection.stop()),而非Fetch的AbortController。

2. 优化服务端取消监听逻辑

你当前的轮询方式既低效又可能错过取消信号,推荐直接注册取消回调或在循环中复用同一个CancellationToken:

var cancellationToken = HttpContext.RequestAborted;

// 注册取消回调,一旦客户端取消请求立即触发
cancellationToken.Register(() => {
    tokenSource2.Cancel();
});

// 长时间运行的循环逻辑,直接复用token并检查状态
while (!cancellationToken.IsCancellationRequested)
{
    // 执行单次任务,务必传入cancellationToken支持中途取消
    await LongRunningStepAsync(cancellationToken);
    
    // 避免空转,添加短延迟(同样传入token,确保延迟也能响应取消)
    await Task.Delay(200, cancellationToken);
}

关键:你的tokenSource2控制的任务必须正确响应CancellationToken,比如在任务内部定期检查IsCancellationRequested,或传入token到支持取消的异步方法中。

3. 排查服务端连接配置

确保ASP.NET Core允许长连接保持,避免因超时导致连接提前关闭:
在Program.cs中配置Kestrel的连接超时:

builder.Services.Configure<KestrelServerOptions>(options =>
{
    // 根据业务需求调整超时时间
    options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10);
    options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(10);
});

4. 排除反向代理的干扰

如果服务部署在反向代理(如Nginx、IIS)之后,需确保代理不会拦截请求取消信号:

  • Nginx:添加proxy_set_header Connection $http_connection;和proxy_http_version 1.1;配置,保持长连接和取消信号传递
  • IIS:在站点配置中启用“WebSocket协议”(若用SignalR),并确保请求超时设置与服务端一致

内容的提问来源于stack exchange,提问作者Nishil Athikkal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:37