WebApi Catch连接超时错误

WebApi Catch Connection Timeout Error

本文关键字:错误 超时 连接 Catch WebApi      更新时间:2023-09-26

我有一个连接到WebApi 2.0的C#项目。

现在,该应用程序将在使用3G数据连接的平板电脑上使用。

我想捕捉并输出一条友好的消息,通知他们应用程序无法联系服务器,请确保他们有3g连接。

请问最好的方法是什么?

通常,加载视图的调用是使用javascript post进行的;

$.post('@Url.Action("Action", "Controller")',

我在失败事件中捕捉到的;

.fail(function (xhr, textStatus, errorThrown) {
    // if connection issue then display an error message
})

我还不得不"隐藏"webapi端点,以阻止url黑客等暴露它。因此,实际上调用的是应用程序mvc控制器操作,在此之前调用api方法。

我发现这里有以下错误;

catch (HttpResponseException ex)
{
    var msg = ex.Response.Content.ReadAsStringAsync().Result;
    var errorModel = JsonConvert.DeserializeObject<AcknowledgementModel>(msg);
    return new HttpStatusCodeResult(500, errorModel.errormessage);
}
catch (Exception ex)
{
    return new HttpStatusCodeResult(500, ex.Message);
}

其中AcknowledgeModel是一个异常过滤器,它将错误封装在其指定的模型中。

超时是客户端错误。服务器永远不会告诉您连接超时——您将得到响应或请求实际超时。

因此,解决方案是使用客户端处理程序
对于jQueryAJAX,您可以使用.fail()来处理它
根据jQuery AJAX文档:

第二个参数(除了null)的可能值为"timeout"、"error"、"notmodified"answers"parserror"。

所以,你可以很容易地这样做:

$.ajax({
    url: 'example.com',
    data: { }
}).done(function(r) {
}).fail(function(xhr, t, err) {
    if (t === "timeout") {
        alert("The connection has timed out. Please, check data connection availability");
    } else { 
        alert("Unknown server error. We are sorry!");
    }
});