【问题标题】:Response.StatusCode and Internet Explorer - Display custom message?Response.StatusCode 和 Internet Explorer - 显示自定义消息?
【发布时间】:2010-09-08 05:20:18
【问题描述】:

我正在我的 Application_Error 处理程序中实现 HttpRequestValidationException,如果可能,我想显示一条自定义消息。

现在,我正在考虑 StatusCode。在我当前的示例中,它发送 200,我认为不应该这样做。我想改为发送(恕我直言)更合适的 400 Bad Request。但是,与此同时,我想使用 Response.Write 输入自定义消息。 Firefox 可以正常显示,但 IE7 给了我默认无用的 Internet Explorer 错误页面。

一方面,我猜 Internet Explorer 只是假设所有内容 200 根本没有任何“好”内容,而这里的 RFC is not really clear

所以我只是想知道,是否为由 HttpRequestValidationException 引起的错误页面发送 HTTP 200 是否良好?有没有好的替代品?

【问题讨论】:

  • 谢谢!我的解决方案:我创建了一个 >512 字节的 Error.aspx,但 Global.asax 将 StatusCode 设置为 400,然后执行 Server.Transfer 而不是 Response.Redirect。适用于 AJAX 和 Internet Explorer。
  • 补充一点:通常,Response.Redirect 也是一个可行的解决方案。但是,如果您使用 ASP.net AJAX,您也会被重定向。 Server.Transfer 确实允许您停留在 AJAX 请求的当前页面上并处理 JavaScript 中的错误。请参阅我的 HttpRequestValidationException 问题。

标签: asp.net http internet-explorer-7


【解决方案1】:

HTTP 200 响应代码并不表示错误。它表明一切正常。您不应该使用 200 响应代码来表示错误。

如果响应少于 512 字节,Internet Explorer 会显示其“友好错误”页面。这里有更多关于这个问题的信息:http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,

【讨论】:

  • 很高兴知道,因此一种解决方法是将响应扩大到至少 513 个字节,这应该是可行的。
【解决方案2】:

不,这当然不是一个好习惯。 2XX 状态代码表示(除其他外)请求有效。这与引发 HttpRequestValidationException 正好相反。

很遗憾,我不知道如何让 IE 正常运行。比发送 200 稍好一点的方法是将其重定向到错误页面,但仍远非完美。

【讨论】:

    【解决方案3】:

    当响应为 4xx 或 5xx 时,Internet Explorer 会显示他们所谓的“友好 HTTP 错误消息”。用户可以在 IE 的 Tools.Options.Advanced[Browsing] 对话框中关闭此选项。

    为错误页面发送 200 通常是不好的做法。一种替代方法是有一个有效的“错误”页面,应该显示错误消息(所以 200 就可以了),然后使用 3xx 重定向到该页面。

    【讨论】:

    • 这听起来确实是个好主意。我已经在做噩梦了,想如何让该机制与 AJAX 一起工作,但我会努力解决这个问题,因为我对当前的 Response.Write(hardcoded html) 方法不满意,因为单独的 error.aspx 有其他优点.
    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多