【问题标题】:Angular 7 cancelled HTTP request not reflecting in Core APIAngular 7 取消的 HTTP 请求未反映在核心 API 中
【发布时间】:2020-02-18 21:17:54
【问题描述】:

我有一个 DotNet Core 2.2 api 端点,它接受 CancellationToken 并在处理时定期检查它。当我从 Angular 7 前端调用该端点,然后取消请求(通过取消订阅)时,取消令牌不会反映取消状态。为了正确取消令牌,我是否缺少步骤?或者这完全不是现在请求取消过程有效?

请注意,我可以看到初始请求触发、api 工作以及请求取消(通过 Chrome devtools 网络选项卡)。

Angular 7

private sub: Subscription;
doWork(): void {
  // calls to http client, sending a POST
  this.sub = this.service.doWork([1,2,3,4]).subscribe();
}
cancelWork(): void {
  if(this.sub && !this.sub.closed) {
    this.sub.unsubscribe();
  }
}

API

[HttpPost("DoWork")]
public async Task<ActionResult<HttpResponseMessage>> DoWork([FromBody] List<int> ids, CancellationToken cancellationToken)
{
    foreach(var id in ids)
    {
        // ---> cancellationToken.IsCancellationRequested is always false   <-------
        cancellationToken.ThrowIfCancellationRequested();

        await doLongRunningTask(id);
    }
}

【问题讨论】:

    标签: angular .net-core cancellation-token


    【解决方案1】:

    cancellationToken.ThrowIfCancellationRequested(); 如果在评估此行时请求被取消,则抛出,因此它在您的情况下不起作用。通常一些异步工具提供 API 来传递他们将在内部使用的令牌

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2017-06-21
      • 1970-01-01
      • 2019-07-04
      • 2019-07-07
      相关资源
      最近更新 更多