我有一个连接到WebApi 2.0的C#项目。
现在,该应用程序将用于使用3G数据连接的平板电脑。
我想捕获并输出一条友好的消息,通知他们应用程序无法联系服务器,请确保他们有3g的连接。
请问最好的方法是什么?
通常,加载视图的调用是使用javascript帖子进行的;
$.post('@Url.Action("Action", "Controller")',
我在失败事件中捕获;
.fail(function (xhr, textStatus, errorThrown) {
// if connection issue then display an error message
})
我还必须“隐藏”webapi端点以停止url hacks等暴露它。因此调用实际上是对应用程序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
是一个异常过滤器,它将错误包装在指定的模型中。
答案 0 :(得分:1)
超时是客户端错误。服务器永远不会告诉您连接超时 - 您将获得响应或请求实际上将超时。
因此,解决方案是使用客户端处理程序
对于jQuery AJAX,您可以使用.fail()
来处理它
根据{{3}}:
第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。
所以,你可以这样轻松地做到这一点:
$.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!");
}
});