【问题标题】:Configure request timeout for WebApi controllers为 WebApi 控制器配置请求超时
【发布时间】:2014-05-13 12:14:32
【问题描述】:

我在我的 WebAPi 控制器中使用异步方法:

public async Task<HttpResponseMessage> SampleMethod(int subscriptionNumber, DateTime departureDate)
{
    // [...]
}

如何配置请求超时?该操作可能需要几分钟时间,我必须确保请求不会超时。

在 MVC 中有一个名为 [AsyncTimeout] 的属性。 WebApi 中是否有等价物?可以全局配置吗?

【问题讨论】:

    标签: c# asp.net-web-api2


    【解决方案1】:

    好问题,我建议从客户端处理这个问题 - 您始终可以在您的使用者代码中指定超时设置,即使它是 ajax:

    $.ajax({
    url: "/ajax_json_echo/",
    timeout: 1000,
    ...
    

    【讨论】:

    • 你是说 IIS/ASP.NET/WebApi2 没有任何内置超时?
    • 是的,他们目前还没有任何东西。 WebAPI 支持取消令牌来取消操作,因此您可以尝试使用 CancellationTokenSource.CancelAfter 来实现,但正如我所提到的 - 从消费代码
    • 另外,以下摘录揭示了更多原因:“取消 HTTP 请求的方法是直接在 HttpClient 上取消它们。原因是多个请求可以在单个 HttpClient 中重用 TCP 连接等您不能安全地取消单个请求而不影响其他请求。”
    猜你喜欢
    • 2014-08-06
    • 2018-03-31
    • 1970-01-01
    • 2020-09-07
    • 2011-04-25
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多