Swagger 不会取消请求

问题描述 投票:0回答:1

我想取消一个简单的 GET 方法,该方法等待 10 秒并返回一个字符串。它封装在 try-catch 块中。 它可以在 CLI 和 Chrome 中运行,但不能在 Swagger 中运行。

[HttpGet("wait")]
[ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
public async Task<string> Wait(CancellationToken userCancellationToken)
{
    try
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine($"Waited {i} seconds, CancellationRequested: {userCancellationToken.IsCancellationRequested}");
            userCancellationToken.ThrowIfCancellationRequested();
            await Task.Delay(1000);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        throw;
    }
     return "OK";
}

在 Chrome 中,我通过“停止加载页面”(X - URL 左侧)并关闭选项卡 (

http://localhost:5001/api/wait
) 取消了操作。

在我使用的 CLI 中

curl -X 'GET' \
  'http://localhost:5001/wait' \
  -H 'accept: application/json'

(swagger本人推荐)

在这两种情况下(CLI 和浏览器)服务器都会打印出:

Waited 0 seconds, CancellationRequested: False
Waited 1 seconds, CancellationRequested: False
Waited 2 seconds, CancellationRequested: False
Waited 3 seconds, CancellationRequested: True
The operation was canceled.

我正在使用最新版本的 Swashbuckle 和

net6.0
:

<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />

大摇大摆地取消不会做任何事情(日志打印到最后并且

CancellationRequested: False
,Chrome的网络窗口也显示响应)

.net-core swagger cancellation
1个回答
0
投票

您可以在代码中放置断点,执行请求,然后一旦断点命中,刷新 Swagger 页面并在 Visual Studio 中按 F5。这应该会触发请求取消。

如果请求足够慢,您可能甚至不需要断点,只需按“执行”然后按 F5。至少在 Firefox 中为我工作。

© www.soinside.com 2019 - 2024. All rights reserved.