【问题标题】:.Net MVC4 - How to return exception in json format?.Net MVC4 - 如何以 json 格式返回异常?
【发布时间】:2013-05-23 08:48:21
【问题描述】:

我有一个 MVC4 应用程序,我在其中使用 jQuery 从 javascript 调用控制器操作。当控制器中发生异常时,返回的响应文本为 HTML 格式。我希望它采用 JSON 格式。如何实现?

我认为一些 JSON 格式化程序应该自己发挥作用......

JavaScript

// 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 控制器动作

[HttpGet]
public JsonResult LoadService(string serviceEndpoint)
{
    // do stuff that throws exception

    return Json(serviceModel, JsonRequestBehavior.AllowGet);            
}

【问题讨论】:

标签: .net ajax json exception asp.net-mvc-4


【解决方案1】:

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

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

try {
 //....
    return Json(new {hasError=false, data=serviceModel}, JsonRequestBehavior.AllowGet); 
}
catch(Exception e) {
    return Json(new {hasError=true, data=e.Message}, JsonRequestBehavior.AllowGet); 
}

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

$.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") ...

【讨论】:

  • 这是我之前解决这个问题的方法。我认为在将 JsonResult 指定为返回类型时,框架会以 Json 格式返回异常。也许我可以将 http 标头设置为 application/json 并获得 Json 结果?我将其设置为答案,因为我认为这是一个众所周知的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多