- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题与此密切相关question .
这是一个简短的概要:我的应用程序在经典模式下运行。我在 Global.asax 中有以下代码
protected void Application_Error(Object sender, EventArgs e)
{
// ... boring stuff...
HttpContext.Current.Server.Transfer("~/MyErrorPage.aspx", true);
}
如果发生错误,一切正常(即我看到 MyErrorPage.aspx)
<httpErrors errorMode="Detailed" />
但是当 errorMode="Custom"
(或 errorMode="DetailedLocalOnly"
并且请求来自远程机器)时,我看到 IIS 自定义错误页面,后面是我的错误页面 (MyErrorPage.aspx)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- The contents of the default 500 page as configured in IIS
Which for me is the default %SystemDrive%\inetpub\custerr\<LANGUAGE-TAG>\500.htm
-->
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- The contents of MyErrorPage.aspx -->
</html>
如果我从 IIS 错误页面部分删除默认的 500 错误页面,则会得到以下输出(请注意,我得到的是“无法显示该页面...”,而不是自定义的 500 页面)
The page cannot be displayed because an internal server error has occurred.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<!-- The contents of MyErrorPage.aspx -->
</html>
如果我使用调试器单步执行代码,那么当我单步执行 Server.Transfer
语句时,我会看到 IIS 500 页面刷新到客户端。
然后,在 MyErrorPage.aspx 的正常页面生命周期之后(如您所料),我的错误页面被发送到浏览器。我已经尝试(绝望地)在 Server.Transfer 之前清除响应的内容(HttpContext.Current.Response.Clear()
),但这没有效果。我也试过在传输之前调用 Server.ClearError()
但这也没有效果。
现在根据链接的问题,“修复”是设置 errormode="Detailed"
但我不想看到 ASP.Net 中未处理的错误的详细错误页面- 例如,如果我输入 url myApp/DoesNotExist.html
,我更愿意看到 IIS 自定义 404 页面而不是详细页面。 [我们的一些客户绝对坚持用户永远不会看到详细的错误页面,因为它被认为是潜在的安全漏洞。]
另一个“修复”是重定向而不是进行服务器传输,但如果可能的话我更愿意进行传输:进行传输意味着浏览器的 URL 不变,这意味着,例如,如果错误发生是因为应用程序.was 刚刚启动,他们可以按 F5 重试请求。重定向显然会将浏览器的地址更改为错误页面。
有人能解释为什么我会看到这种行为吗?有人有解决方案吗?
提前致谢。
编辑
我拼凑了一个演示行为的小应用程序:
http://rapidshare.com/files/427244682/Err.zip
[确保应用程序在经典模式下运行。]
如果您单击同时设置了 transfer 和 setstatus args 的链接,那么您就会看到问题所在。 BANG
最佳答案
将以下属性添加到您的 <httpErrors>
标签:
existingResponse="PassThrough"
这应该可以解决问题。 PassThrough
errorMode="Detailed"
时的默认值.
更多信息请访问 http://blogs.iis.net/ksingla/archive/2008/02/18/what-to-expect-from-iis7-custom-error-module.aspx
关于asp.net - 为什么我在从 Application_Error 和 errorMode ="Custom"执行 Server.Transfer 时看到 2 个错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959996/
如何获取 中设置的 errorMode 属性的值? web.config 中的元素? 我正在尝试在 ASP.NET Web 应用程序中实现一些“ self 诊断”。当应用程序启动时,它会运行 web
我有一个 asp.net MVC3 应用程序。在我的 Controller 中,我有一个 ajax 操作,它使用 Response.StatusCode = 600 设置自定义响应代码。我需要按原样传
我的问题与此密切相关question . 这是一个简短的概要:我的应用程序在经典模式下运行。我在 Global.asax 中有以下代码 protected void Application_E
我是一名优秀的程序员,十分优秀!