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

时间:2016-04-13 00:49:09

标签: asp.net asp.net-web-api owin cancellation-token

我的web api控制器中有以下方法(长时间运行的方法可以取消取消令牌,即如果已经请求取消,它们将无法运行):

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

    return Ok();
}

客户端具有以下代码来调用我的web api控制器:

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.
    }
}

如果客户的请求超过&#34; LongRunningNetworkOperation2&#34;被叫,将取消提示防止&#34; LongRunningNetworkOperation2&#34;从跑步?换句话说,客户端是否可以通知web api停止运行某个请求?

1 个答案:

答案 0 :(得分:3)

  

客户端是否可以通知web api停止运行某个请求?

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

在实践中,这取决于您使用的HttpClientWebAPI实施的完整程度。取消并非必须保证,但我希望它至少适用于桌面HttpClient