如何在Bad Request MVC时返回JSON对象

Hak*_*tık 6 javascript c# model-view-controller json bad-request

我正在研究MVC 4项目.

我有一个在Ajax Post请求完成时执行的Action.

在某些情况下,我可以确切地确定,我必须StatusResponse对象的属性设置为HttpBadRequestvalue,并返回包含一些数据的JSON对象以显示给最终用户.

问题是我无法在javascript方法中收到JSON对象,我正在接收其他内容.这是因为我将Response的Status属性设置为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()
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从这样的javascript函数中读取这个返回的JSON对象

使用Javascript

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

问题是JSON对象不会填充datajavascript 的变量.在调试Javascirpt代码时,我在data变量中得到以下内容

在此输入图像描述

当我从Action中删除这一行时最奇怪的事情

HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
Run Code Online (Sandbox Code Playgroud)

然后我正确地收到了JSON对象,我可以按如下方式阅读它

在此输入图像描述

注意:我收到了正确的JSON对象,但在其他Javascript函数中.(现在我OnDeleteSuccessOnDeleteFailed函数上接收JSON对象,而不是函数.

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

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

更新

这里是Web.config设置一些httpErrosIIS 的文件片段.此更新用于响应有关错误原因将来自此点的建议

<system.webServer>
   <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Home/PageNotFound" />
   </httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.

hai*_*770 3

在你的中Web.Config,尝试更改existingResponseAuto

<httpErrors errorMode="Custom" existingResponse="Auto">
Run Code Online (Sandbox Code Playgroud)

查看文档