【问题标题】:ASP.NET MVC showing error page on when sending responses with status 500ASP.NET MVC 在发送状态为 500 的响应时显示错误页面
【发布时间】:2015-01-05 15:28:26
【问题描述】:

我在服务器中有以下动作:

[HttpPost]
public JsonResult SearchContracts(SearchViewModel vm)
{
    List<string> errors;

    if (IsValid(vm, out errors))
    {
        return Json(service.Search(vm), JsonRequestBehavior.AllowGet);
    }
    else
    {
        HttpContext.Response.StatusCode = 500;

        return Json(new { Errors = errors }, JsonRequestBehavior.AllowGet);
    }
}

在本地,效果很好。当请求无效时,它会返回一个带有错误的 JSON,并且响应中有一个 500 表示 HTTP 状态代码。

部署后,IIS 将返回this famed error page,而不是描述的 JSON。

这里是 web.config 以及 customErrors 部分的详细信息:

<customErrors mode="Off" defaultRedirect="~/error.htm">
    <error statusCode="404" redirect="~/errorhandling/pagenotfound" />
</customErrors>

我尝试将其转为On,但均未成功。

我应该在哪里更改以停止接收那个丑陋的错误页面而不是我的美丽 JSON?

编辑:

我将状态码更改为400,现在我得到的是文本Bad Request,而不是JSON:

【问题讨论】:

  • 简单不要使用dark error 500来通知用户模型的无效状态,它的目的是在服务器端出现问题但服务器本身无法告诉你问题时使用.例如,访问邮件服务器或类似的东西时访问被拒绝。

标签: c# asp.net-mvc json http iis


【解决方案1】:

来自this link

解决了编辑web.config并添加以下属性:

<system.webServer>
    ...
    <httpErrors existingResponse="PassThrough"></httpErrors>
    ...
</system.webServer>

另一个离奇的微软故事。

【讨论】:

    【解决方案2】:

    您使用的是服务器错误而不是客户端错误。根据Wikipedia 5XX 错误:

    “服务器未能完成一个明显有效的请求。”

    在这种情况下,您的服务器工作正常,客户端发送错误请求。请改用客户端错误 (4XX)。

    【讨论】:

    • 我编辑了它,但现在我收到了 Bad Request 的文字 :( 请查看我的问题已更新
    【解决方案3】:

    如果您需要同时使用自定义错误页面并有时返回 httpErrors 部分中定义的 http 状态的自定义数据,请执行以下操作: - 在 web.config 中设置existingResponse="Auto"(httpErrors 部分,这是您定义自定义错误页面的地方); - 在您的操作中设置 TrySkipIisCustomErrors = true(返回 4xx 状态和内容的操作); - 清除 global.asax 中的服务器错误(Application_Error() - Server.ClearError())并重新设置状态代码(Reponse.StatusCode = ((HttpException)Server.GetLastError()).GetHttpCode()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2018-12-28
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多