主题是不言自明的。我有开发人员和生产环境。开发人员环境。是我的本地主机机器。我在控制器中有操作方法,当出现问题(发生错误或逻辑不一致)并返回 Json-answer 时,将响应状态代码设置为 500。我常用的方法是这样的:
[HttpPost]
public ActionResult DoSomething(int id)
{
try
{
// some useful code
}
catch(Exception ex)
{
Response.StatusCode = 500;
Json(new { message = "error" }, JsonBehaviour.AllowGet)
}
}
在生产环境的客户端。当发生此类错误时,ajax.response 看起来像 HTML 代码,而不是预期的 JSON。
考虑一下:
<div class="content-container">
<fieldset>
<h2>500 - Internal server error.</h2>
<h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
</fieldset>
</div>
过滤上下文不是一个选项。我认为这是某种 IIS 或 web.config 问题。
解决方案:
我们决定TrySkipIisCustomErrors
在 Global.asax 中添加 BeginRequest,它解决了我们应用程序中每个方法的问题。