Javascript MVC请求错误时如何返回JSON对象

Javascript MVC请求错误时如何返回JSON对象,javascript,c#,json,model-view-controller,bad-request,Javascript,C#,Json,Model View Controller,Bad Request,我正在从事MVC4项目 我有一个在Ajax Post请求完成时执行的操作 在某些情况下,我可以准确地确定,我必须将响应对象的状态属性设置为HttpBadRequest值,并返回JSON对象,其中包含一些要向最终用户显示的数据 问题是我无法在javascript方法中接收JSON对象, 我收到了别的东西。这是因为我正在设置HttpBadRequest值响应的Status属性 详情如下 行动 // this method will executed when some Ajax Post reque

我正在从事MVC4项目

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

在某些情况下,我可以准确地确定,我必须将
响应
对象的
状态
属性设置为
HttpBadRequest
值,并返回JSON对象,其中包含一些要向最终用户显示的数据

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

详情如下

行动

// 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函数中读取返回的JSON对象

Javascript

function OnDeleteFailed(data) {
    debugger;
    var try1 = $.parseJSON(data.responseText);
    var try2 = JSON.parse(data.responseJSON);
}
问题是JSON对象将填入javascript的
数据
变量。 调试Javascript代码时,我在
数据中得到了以下内容

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

HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
然后我正确地接收到了JSON对象,我可以如下所示读取它

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

因此,问题是:代码有什么问题,如果我将“Response”对象的“StatusCode”属性设置为“BadRequest”值,javascript函数将不会接收JSON对象

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

已更新

下面是
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
中,尝试将
现有响应更改为
自动

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


请参见

可能是IIS自定义错误干扰了响应。@haim770我在web.config文件中设置了一些自定义错误,这与我的issue@haim770我将编辑我的问题,将包含一些IIS自定义错误的Web.Config文件片段包含在
下。请尝试更改
exisTing响应
直通
根据此答案:-
自动
更好,因为它会将
TrySkipIisCustomErrors
考虑在内,并且只有在未设置的情况下才会
替换