这与我关于how to handle errors from jQuery AJAX calls的问题有关。一些响应建议我使用“error”回调来显示jQuery AJAX调用中的任何错误。我想知道如何使用ASP.NET MVC。我的控制器操作是否有办法返回可从“错误”回调中访问的错误?客户端代码看起来像这样:
$.ajax({
type: "POST",
url: "MyUrl",
data: "val1=test",
success: function(result){
// Do stuff
},
error: function(request,status,errorThrown) {
}
});
答案 0 :(得分:21)
注意:嘿,这是在ASP.Net MVC甚至达到1.0之前发布的,从那以后我甚至没有看过框架。你可能应该停止提升这一点。
做这样的事情:
Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Error message here");
状态代码应根据错误的性质而改变;通常,4xx表示用户生成的问题,5xx表示服务器端问题。
答案 1 :(得分:8)
如果您正在使用
[HandleError]
然后抛出 HttpException 将被捕获并路由到您的自定义错误页面。
另一种选择是使用
Response.StatusCode = 500;
Response.Write("Error Message");
Response.End();
可能有一种更方便的方式来写这个,但我还没有发现它。
答案 2 :(得分:7)
如果您正在使用MVC 3,那么您可以在控制器中返回一个具有HTTP状态代码和状态消息的ActionResult:
return new HttpStatusCodeResult(500, "Error message");
然后,在您的错误回调中:
error: function (request, textStatus, errorThrown) {
alert(request.statusText);
}
答案 3 :(得分:1)
我认为该事件是针对任何响应代码不是200的响应而引发的。虽然我在文档中找不到这方面的证据。
要从代码(在Webforms中工作)执行此操作:
throw new HttpException(500, "Error message");
答案 4 :(得分:1)
根据this页面,您只需在ASP.net页面上应用标题HTTP/1.0 500 Internal Server Error
即可。 $.ajax
请求将捕获该错误并执行error
回调函数。 =]
答案 5 :(得分:1)
我发给你一个提议;适用于受控和不受控制的例外。
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;
}
}
我博客上的更多信息。 http://rodrigopb.wordpress.com/2012/11/28/gestion-de-errores-en-peticiones-ajax-a-mvc/