How do you trigger the “error” callback in a jQuery AJAX call using ASP.NET MVC?
这与我关于如何处理来自jQuery AJAX调用的错误的问题有关。 一些响应建议我使用"error"回调来显示jQuery AJAX调用中的任何错误。 我想知道如何使用ASP.NET MVC。 我的控制器操作是否有办法返回可从"错误"回调中访问的错误? 客户端代码看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 | $.ajax({ type:"POST", url:"MyUrl", data:"val1=test", success: function(result){ // Do stuff }, error: function(request,status,errorThrown) { } }); |
注意:嘿,这是在ASP.Net MVC甚至达到1.0之前发布的,从那以后我甚至没有看过框架。你可能应该停止提升这一点。
做这样的事情:
1 2 | Response.StatusCode = (int)HttpStatusCode.BadRequest; actionResult = this.Content("Error message here"); |
状态代码应根据错误的性质而改变;通常,4xx表示用户生成的问题,5xx表示服务器端问题。
如果你正在使用
1 | [HandleError] |
然后抛出一个HttpException将被捕获并路由到您的自定义错误页面。
另一种选择是使用
1 2 3 | Response.StatusCode = 500; Response.Write("Error Message"); Response.End(); |
可能有一种更方便的方式来写这个,但我还没有发现它。
如果您正在使用MVC 3,那么您可以在控制器中返回一个具有HTTP状态代码和状态消息的ActionResult:
1 | return new HttpStatusCodeResult(500,"Error message"); |
然后,在你的错误回调中:
1 2 3 | error: function (request, textStatus, errorThrown) { alert(request.statusText); } |
我寄给你一个建议;适用于受控和不受控制的例外。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class CodeExceptionToHttpFilter : FilterAttribute, IExceptionFilter { public CodeExceptionToHttpFilter() { Order = 2; } public void OnException(ExceptionContext filterContext) { var codeException = filterContext.Exception as CodeException; var response = filterContext.RequestContext.HttpContext.Response; response.StatusCode = (codeException == null)? 550: 551; response.ContentType = MediaTypeNames.Text.Plain; response.Charset ="utf-8"; response.Write(filter.Exception.Message); filterContext.ExceptionHandled = true; response.TrySkipIisCustomErrors = true; } |
}
我的博客上有更多信息。
Gestión de errores en peticiones Ajax a MVC
根据此页面,您只需要在ASP.net页面上应用标题
我认为对于任何响应代码不是200的响应都会引发该事件。但是我无法在文档中找到这方面的证据。
要从代码(在Webforms中工作)执行此操作:
1 | throw new HttpException(500,"Error message"); |