关于ajax:.Net MVC4 – 如何以json格式返回异常?

.Net MVC4 - How to return exception in json format?

我有一个MVC4应用程序,我使用jQuery从javascript调用控制器操作。 当控制器中发生异常时,返回的响应文本为HTML格式。 我希望它是JSON格式。 怎么能实现这一目标?

我认为一些JSON格式化程序应该自己做魔术......

JavaScript的

1
2
3
4
5
// Call server to load web service methods
$.get("/Pws/LoadService/", data, function (result) {
    // Do stuff here
},"json")
.error(function (error) { alert("error:" + JSON.stringify(error)) });

.Net控制器行动

1
2
3
4
5
6
7
[HttpGet]
public JsonResult LoadService(string serviceEndpoint)
{
    // do stuff that throws exception

    return Json(serviceModel, JsonRequestBehavior.AllowGet);            
}


实际上,您在错误函数中跟踪的错误与请求有关,而与应用程序的错误无关

所以我会在Json结果中传递错误细节,就像这样:

1
2
3
4
5
6
7
try {
 //....
    return Json(new {hasError=false, data=serviceModel}, JsonRequestBehavior.AllowGet);
}
catch(Exception e) {
    return Json(new {hasError=true, data=e.Message}, JsonRequestBehavior.AllowGet);
}

在客户端,您可以处理类似的事情:

1
2
3
4
5
6
7
8
9
10
$.get("/Pws/LoadService/", data, function (result) {

    var resultData = result.d;
    if(resultData.hasError == true) {
      //Handle error as you have the error's message in resultData.data
    }
    else {
        //Process with the data in resultData.data
    }
},"json") ...