gpt4 book ai didi

asp.net - 为什么我在从 Application_Error 和 errorMode ="Custom"执行 Server.Transfer 时看到 2 个错误页面?

转载 作者:行者123 更新时间:2023-12-04 16:55:37 24 4
gpt4 key购买 nike

我的问题与此密切相关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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com