Server.Transfer throws执行子请求时出错。怎么解决?

时间:2010-03-02 08:21:45

标签: asp.net c#-2.0 server.transfer

我在C#2.0中有一个HttpModule来处理抛出的异常。每当抛出异常时,都会调用带有一些查询字符串的错误页面(aspx)。它是通过Server.Transfer()完成的。

但是当控件尝试执行Server.Transfer()时,会抛出以下异常:

  

执行[pagename] .aspx。

的子请求时出错

Request.Redirect()工作正常。

我尝试在传递请求的页面的Page指令中设置EnableViewStateMac="false"。仍然存在问题。

这是我尝试过的代码:

string errorPage = "errorpage.aspx?id=" + someErrorId
HttpContext.Current.Server.Transfer(errorPage,true);

知道如何解决这个问题吗?

8 个答案:

答案 0 :(得分:18)

我找到了Server.Transfer()

的替代方案

我用过

 HttpContext.Current.RewritePath("somefile.aspx");

这解决了这个问题。

答案 1 :(得分:10)

我在 OnPreRequestHandlerExecute 事件中挂钩了请求管道,发现我无法使用Server.Transfer,因为它抛出了与您执行子请求相同的错误。

使用HttpContext.Current.RewritePath没有用,因为它似乎被忽略了,我没有被重定向到任何地方。

如果您正在使用IIS 7及更高版本,则可以使用 Server.TransferRequest 代替我这样做。

这个答案涵盖了两种方法之间的差异:TransferRequest vs Transfer in ASP.Net

答案 2 :(得分:8)

我的解决方案有所不同:

生成的this Microsoft Knowledge Base article在线查询表明解决方案是使用 Response.Redirect 而不是 Server.Transfer

我更改了命令并获得了更准确的“ 404错误消息”,而不是隐藏的“错误执行子请求”消息。

这导致我检查重定向字符串,我注意到我的路径已关闭。

我将传输字符串从“ErrorPage.aspx”修复为“../ErrorPage.aspx”(注意路径更改), Server.Transfer 工作正常。

答案 3 :(得分:4)

如果您在调试期间碰巧在VS.NET IDE中发现此异常,请至少继续一次并按F5继续调试。在我的例子中,实际的页面确实使用真正导致问题的ASP.NET异常进行渲染。在我的情况下,我有一个格式不正确的asp:ChangePassword控件,实际导致“错误执行子请求”异常。

答案 4 :(得分:1)

我将 Server.TransferRequest 更改为 Server.Transfer ,然后才有了真正的例外。引用不正确的ReportViewer版本是一个问题。

答案 5 :(得分:0)

这不是一个错误,它是设计的。见http://support.microsoft.com/kb/320439

答案 6 :(得分:0)

Server.Transfer(" mywebpage.aspx")似乎仅在会话已存在时才有效。

如果没有会话启动,则会抛出此错误,因此您必须使用 Response.Redirect 或其他方法。

答案 7 :(得分:0)

我遇到了同样的问题,并发现它与运行Server.Transfer的位置以及重定向到的位置的相对路径有关。在我的情况下,这是在一个子目录中执行,所以@ ray的答案(在URL的开头添加../)起作用。但是,当我在上面的目录中执行时,同样的事情发生了。因此,我改为使用root路径:

Server.Transfer("~/errorpage.aspx")