错误请求 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">
我正在处理 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">