加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC Ajax错误返回视图而不是ajax

发布时间:2020-12-16 07:19:38 所属栏目:asp.Net 来源:网络整理
导读:我正在通过 AJAX对一个方法进行ASP.NET MVC调用,错误会引发异常.我希望将异常的消息传递回客户端,我宁愿不必捕获异常.像这样的东西: [HttpPost]public ActionResult AddUser(User user) { if (UserIsValid(user)) { return Json(new { resultText = "Succes
我正在通过 AJAX对一个方法进行ASP.NET MVC调用,错误会引发异常.我希望将异常的消息传递回客户端,我宁愿不必捕获异常.像这样的东西:

[HttpPost]
public ActionResult AddUser(User user) {
  if (UserIsValid(user)) {
    return Json(new { resultText = "Success!" });
  } 
  throw new Exception("The user was invalid.  Please fill out the entire form.");
}

我在我的firebug响应中看到一个HTML页面

<!DOCTYPE html>
<html>
    <head>
        <title>"The user was invalid.  Please fill out the entire form."</title>
        .....

我不想被迫使用try catch块来执行此操作.有没有办法自动获取jQuery $(document).ajaxError(function(){}来读取此异常消息?这是不好的做法?我可以覆盖控制器OnException吗?或者我是否必须尝试/ catch并返回JSON?

像这样的东西会很好:

$(document).ajaxError(function (data) {
    alert(data.title);        
});

解决方法

您可以使用自定义过滤器执行此操作:

$(document).ajaxError(function(event,jqxhr) {
    console.log(jqxhr.responseText);
});

[HttpPost]
[CustomHandleErrorAttribute]
public JsonResult Foo(bool isTrue)
{
    if (isTrue)
    {
        return Json(new { Foo = "Bar" });
    }
    throw new HttpException(404,"Oh noes...");
}

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        var exception = filterContext.Exception;
        var statusCode = new HttpException(null,exception).GetHttpCode();

        filterContext.Result = new JsonResult
        {
            JsonRequestBehavior = JsonRequestBehavior.AllowGet,//Not necessary for this example
            Data = new
            {
                error = true,message = filterContext.Exception.Message
            }
        };

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = statusCode;  
        filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }
}

有点受到这篇博文的启发:http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读