【发布时间】:2013-06-15 12:02:08
【问题描述】:
项目:在 .net 4.0 框架下运行的 ASP MVC 4:
在 VS 2010 express 下运行应用程序(或在我的本地计算机上部署和运行在 IIS 7.5 下)时,操作的以下(伪代码)结果按预期工作
[HttpPost]
public ActionResult PostWord(Model model)
{
....
Response.StatusCode = 400;
Return new JsonResult { data = new {fieldName = "Word", error = "Not really a word!" } };
(并且我已经分配了 JsonResult 对象的 ContentType 和 ContentEncoding 属性,行为上没有区别)
当可部署对象移动到 Web 主机(使用 IIS 7)时,firebug 告诉我响应符合预期(400),但响应中没有 JSON(即没有任何类型的文本)。如果我删除该行
Response.StatusCode = 400;
从动作来看,响应中完美形成了JSON,但是响应状态码当然是200(OK),这会干扰消费javascript和适当的函数调用。
对可能发生的情况以及如何解决此问题有任何想法吗?谢谢
【问题讨论】:
-
为什么要返回400?这不就是一个带有友好错误信息的错误页面吗
-
stackoverflow.com/questions/6123425/… 也许我应该做不同的事情,但无论如何都会返回 JSON - 响应代码提供回发函数信息以便知道如何处理 JSON。 200 对我来说意味着“根据要求更新数据库”。
-
我会检查 JSON 中的错误字段而不是 http 状态码
-
IIS7默认隐藏了详细的错误信息,所以在返回错误时你不会得到任何内容。尝试更改 iss7 设置以返回详细的错误消息并查看是否有效
-
这可能是 IIS 自定义错误的问题。也许尝试设置
Response.TrySkipIisCustomErrors = true;link
标签: json asp.net-mvc-4 http-status-codes