10

我在 global.asax 的 Application_Error 方法中有一个自定义错误处理程序,当发生错误时,我使用以下代码将用户转移到错误页面:

Server.Transfer("/Error/");

但是,在没有指定实际页面名称的情况下,上面的代码会因“ Error execution child request for /Error/ ”异常而中断。

因此,如果我使用Server.Transfer("/Error/Default.aspx")它,它可以正常工作,没有任何问题。

同样使用也可以Response.Redirect("/Error/")正常工作,但是我们希望继续使用 Server.Transfer 以在显示错误页面时保留地址栏中显示的 URL,以便用户可以简单地刷新页面以重试访问原始的违规 URL。

如果有人可以评论如何在不指定实际 aspx 页面名称的情况下使 Server.Transfer 方法正常工作,将不胜感激。

非常感谢。

4

1 回答 1

15

Server.Transfer需要提供所需输出的资源的实际虚拟路径。它不会通过 IIS 找出网站的默认文档是什么,因此它不知道您所说的“/Error/”是什么意思,除非那是一个实际的文件名。

Response.Redirect之所以有效,是因为它使用该相对 URL (/Error/) 向浏览器发送“已移动”结果,并且当浏览器对 /Error/ 发出新请求时,IIS 首先处理它,并应用默认文档设置。

于 2010-12-29T11:18:26.560 回答