【问题标题】:Can a client cancel a Web Api request?客户端可以取消 Web Api 请求吗?
【发布时间】:2016-08-03 20:30:31
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    客户端能否向 web api 发出信号以停止运行某个请求?

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

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

    【讨论】:

    • 您知道记录此特定取消行为的任何地方吗?
    • @Nick:asp.net 网站上的搜索现在无法正常工作,所以我不确定它是否真的有官方记录。
    • 这有一个关于客户端是浏览器时的取消行为的词 -- davepaquette.com/archive/2015/07/19/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2013-04-26
    • 2011-10-02
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多