客户端可以取消 Web Api 请求吗?

Can a client cancel a Web Api request?

我的网络 api 控制器中有以下方法(长 运行ning 方法支持取消令牌,即如果请求取消,它们不会 运行):

public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken)
{
    await LongRunningNetworkOperation1(cancellationToken);
    await LongRunningNetworkOperation2(cancellationToken);

    return Ok();
}

客户端有以下代码调用我的webapi控制器:

using (var httpClient = new HttpClient())
{
    httpClient.Timeout = TimeSpan.FromMilliseconds(3000);

    try
    {
        // Sending DELETE request
        HttpResponseMessage deleteMessage = await httpClient.
                             DeleteAsync("http://localhost:80/api/apiMethod");
    }
    catch (Exception e)
    {
        // Timeout occurred.
    }
}

如果在调用"LongRunningNetworkOperation2"之前客户端请求超时,cancellationToken是否会阻止"LongRunningNetworkOperation2"从运行ning?换句话说,客户端可以向网络发出信号 api 以停止 运行 某个请求吗?

can the client signal the web api to stop running a certain request?

理论上是的。取消 HttpClient 应该关闭基础 TCP/IP 连接。作为响应,ASP.NET 堆栈应检测到其客户端丢失,并取消 WebAPI CancellationToken.

实际上,这取决于您使用的 HttpClientWebAPI 实现的完整程度。取消不一定保证,但我希望它至少适用于桌面 HttpClient