您如何触发“安全”命令;“错误”;使用ASP.NET MVC在jQuery AJAX调用中进行回调?

您如何触发“安全”命令;“错误”;使用ASP.NET MVC在jQuery AJAX调用中进行回调?,jquery,asp.net-mvc,ajax,Jquery,Asp.net Mvc,Ajax,这与我的问题有关。一些回复建议我使用“error”回调来显示jqueryajax调用中的任何错误。我想知道如何使用ASP.NETMVC实现这一点。我的控制器操作是否有方法返回可从“错误”回调访问的错误?客户端代码如下所示: $.ajax({ type: "POST", url: "MyUrl", data: "val1=test", success: function(result){ // Do stuff }, error: functio

这与我的问题有关。一些回复建议我使用“error”回调来显示jqueryajax调用中的任何错误。我想知道如何使用ASP.NETMVC实现这一点。我的控制器操作是否有方法返回可从“错误”回调访问的错误?客户端代码如下所示:

$.ajax({
   type: "POST",
   url: "MyUrl",
   data: "val1=test",
   success: function(result){
        // Do stuff
   },
   error: function(request,status,errorThrown) {

   }
 });
Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Error message here");

我认为对于响应代码不是200的任何响应都会引发该事件。但我在文件里找不到这方面的证据

要从代码(在Webforms中工作)执行此操作,请执行以下操作:


根据页面,您只需在ASP.net页面上应用标题
HTTP/1.0 500 Internal Server Error
$.ajax
请求将捕获该错误并执行
错误
回调函数。=]

注意:嘿,这是在ASP.NETMVC达到1.0之前发布的,从那以后我就没有看过这个框架了。你应该停止投票


这样做:

$.ajax({
   type: "POST",
   url: "MyUrl",
   data: "val1=test",
   success: function(result){
        // Do stuff
   },
   error: function(request,status,errorThrown) {

   }
 });
Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Error message here");
状态代码应根据错误的性质而改变;通常,4xx表示用户生成的问题,5xx表示服务器端问题。

如果使用

[HandleError]
然后抛出一个HttpException将被捕获并路由到您的自定义错误页面

另一个选择是使用

Response.StatusCode = 500;
Response.Write("Error Message");
Response.End();

可能有一种更方便的方法来编写它,但我还没有发现它。

如果您使用的是MVC 3,那么您可以在控制器中返回一个包含HTTP状态代码和状态消息的ActionResult:

return new HttpStatusCodeResult(500, "Error message");
然后,在错误回调中:

error: function (request, textStatus, errorThrown) {
    alert(request.statusText);
}

我送你一份建议书;与受控和非受控异常一起工作

  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;
   }
}

更多关于我博客的信息。

如何从控制器操作发送除200以外的响应代码?假设我的控制器操作确定用户无权访问该函数,我希望返回除200以外的响应代码,以便命中“错误”回调。我该怎么做呢?嗯,从控制器操作中抛出一个异常会起作用吗?这应该会发回500个响应代码,对吗?编辑答案以提供一种可能的方法我认为这个答案与Todd的第一种方法相结合可能是实现这一点的完整方法。是的,[HandleError]属性让我明白了这一点。它正在捕获我的异常并重定向到我的错误页面。不幸的是,这个属性在controller类上,所以我没有立即看到它。我相信您标记了一个错误的答案。我更喜欢阿拉塞克的答案,而不是HttpException,这在技术上是错误的。这在所有浏览器中都有效吗?这对我来说似乎是更正确的答案…你在IE8中试过吗?request.responseText属性包含null,没有“Error message here”字符串:(我想知道新的HttpStatusCodeResult(500,“Error message”)背后的代码是什么);是。源代码是否在某个地方,或者我们是否可以反射它?可能对我们2中的人有帮助。@rball-代码位于codeplex上的以下链接:这将带我到整个源代码。不确定我是否单击了错误的内容,但即使只是随便筛选源代码,也没有找到任何内容。我必须下载,看看是否可以通过HttpStatusCodeResult()对象的IDE.+1找到它…但是“错误消息”是错误的。