Global.asax中的Server.Transfer

时间:2010-12-29 11:14:28

标签: c# .net asp.net global-asax server.transfer

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

Server.Transfer("/Error/");

但是,如果没有指定实际的页面名称,则上面的代码会以“错误执行/ Error / 的子请求”异常而中断。

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:14)

Server.Transfer需要实际的虚拟路径到资源,该资源将提供所需的输出。它没有通过IIS来查明网站的默认文档是什么,所以它不知道“/ Error /”的含义,除非这是一个实际的文件名。

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