错误请求 MVC 时如何返回 JSON 对象
Posted
技术标签:
【中文标题】错误请求 MVC 时如何返回 JSON 对象【英文标题】:How to return JSON object when Bad Request MVC 【发布时间】:2016-01-13 17:59:48 【问题描述】:我正在开发 MVC 4 项目。
我有一个在 Ajax Post 请求完成时执行的操作。
在某些情况下,我可以准确确定,我必须将Response
对象的Status
属性设置为HttpBadRequest
值,并返回包含一些数据的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()
);
我想从这样的 javascript 函数中读取返回的 JSON 对象
Javascript
function OnDeleteFailed(data)
debugger;
var try1 = $.parseJSON(data.responseText);
var try2 = JSON.parse(data.responseJSON);
问题在于 JSON 对象将不填充 javascript 的 data
变量。
在调试 Javascript 代码时,我在 data
变量中得到以下信息
当我从动作中删除这一行时最奇怪的事情
HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
然后我正确收到了 JSON 对象,我可以将其读取为以下内容
注意:我收到了正确的 JSON 对象,但在其他 Javascript 函数中。
(现在我在 OnDeleteSuccess
函数中接收 JSON 对象,而不是在 OnDeleteFailed
函数中。
所以问题是:代码有什么问题,所以如果我将“Response”对象的“StatusCode”属性设置为“ BadRequest”值?
我搜索了很多答案(从昨天到现在),经过长时间的搜索,这是与我最相关的question,但不幸的是,该问题的解决方案对我根本不起作用。
更新
这里是Web.config
文件的sn-p,它设置了IIS 的一些httpErrors
。
本次更新回应提示错误原因将来自此点
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Home/PageNotFound" />
</httpErrors>
</system.webServer>
任何想法都会受到赞赏。
【问题讨论】:
可能是 IIS 自定义错误干扰了响应。 @haim770 我在 web.config 文件中设置了一些客户错误,这是否与我的问题有关 @haim770 我将编辑我的问题以包含包含一些 IIS 自定义错误的 Web.Config 文件的 sn-p<customErrors mode="Off" />
在 <system.web>
之下吗?
尝试将existingResponse
改为PassThrough
【参考方案1】:
在您的Web.Config
中,尝试将existingResponse
更改为Auto
:
<httpErrors errorMode="Custom" existingResponse="Auto">
见Documentation
【讨论】:
根据这个答案:***.com/a/21271085 -Auto
更好,因为它会考虑TrySkipIisCustomErrors
,如果没有设置,只会考虑Replace
。以上是关于错误请求 MVC 时如何返回 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 中以 JSON 格式返回 500 错误?
spring mvc 不返回 json 内容 - 错误 406