错误请求 MVC 时如何 return JSON 对象

How to return JSON object when Bad Request MVC

我正在处理 MVC 4 项目。

我有一个在 Ajax Post 请求完成时执行的操作。

在某些我可以准确确定的情况下,我必须将 Response 对象的 Status 属性 设置为 HttpBadRequest 值,并且 return JSON 包含一些要显示给最终用户的数据的对象。

问题是我无法在 javascript 方法中接收到 JSON 对象, 我收到了别的东西。这是因为我正在设置对 HttpBadRequest 值的响应的状态 属性。

这是详细信息

动作

// this method will executed when some Ajax Post request.
[HttpPost]
public ActionResult Delete(int id)
{
    // some code here ......

    // in some case we will determine an error like this
    if(error)
    {
        HttpContext.Response.Clear();
        HttpContext.Response.TrySkipIisCustomErrors = true;
        HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;

        return Json(new
        {
            Message = string.Format(format, values),
            Status = messageType.ToString()
        });
    }
}

我想从 javascript 函数中读取这个 returned JSON 对象

Javascript

function OnDeleteFailed(data) {
    debugger;
    var try1 = $.parseJSON(data.responseText);
    var try2 = JSON.parse(data.responseJSON);
}

问题是 JSON 对象将 NOT 填充到 javascript 的 data 变量中。 调试 Javascript 代码时,我在 data 变量

中得到以下内容

最奇怪的是,当我从操作中删除这一行时

HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;

然后我正确地收到了 JSON 对象,我可以读取它如下

注意:我收到了正确的 JSON 对象,但是在其他 Javascript 函数中。 (现在我在 OnDeleteSuccess 函数中收到 JSON 对象,而不是在 OnDeleteFailed 函数中。

所以问题是:代码有什么问题,所以如果我设置了javascript函数,JSON对象将不会收到对“BadRequest”值的“Response”对象的“StatusCode”属性 ?

我搜索了很多答案(从昨天到现在),经过长时间的搜索,这是对我最相关的 question,但不幸的是,这个问题的解决方案对我来说根本不起作用.

已更新

这里是 Web.config 文件的片段,它设置了 IIS 的一些 httpErrors。 本次更新回应提示错误原因会出自于此

<system.webServer>
   <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Home/PageNotFound" />
   </httpErrors>
</system.webServer>

任何想法将不胜感激。

在你的 Web.Config 中,尝试将 existingResponse 更改为 Auto:

<httpErrors errorMode="Custom" existingResponse="Auto">

Documentation