【问题标题】:Server.Transfer in Global.asaxGlobal.asax 中的 Server.Transfer
【发布时间】:2011-06-01 00:19:54
【问题描述】:

我在 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 方法正常工作,我们将不胜感激。

非常感谢。

【问题讨论】:

  • 没有特定页面的 Server.Transfer 是否可以在常规页面上工作?如果 Server.Transfer 隐藏了页面名称,为什么在传输中包含它会出现问题?
  • 我知道你的意思,真的在代码中包含页面名称不会影响最终用户如何看待它,我只是想寻求一点完美,因为我们所有的路径都被声明为常量,并认为 Server.Transfer 可以遵循这里的约定。我想我只需要为此实例做一个例外并包含完整路径。谢谢。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多