31

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

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

执行 [pagename].aspx 的子请求时出错。

Request.Redirect()工作正常。

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

这是我尝试过的代码:

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

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

4

8 回答 8

19

我找到了 Server.Transfer() 的替代方法

我用了

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

这解决了这个问题。

于 2010-03-02T09:48:17.947 回答
14

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

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

如果您使用的是 IIS 7 及更高版本,则可以使用Server.TransferRequest代替,这对我有用。

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

于 2015-02-17T16:21:40.040 回答
8

我的修复不同:

在线查询生成了此 Microsoft 知识库文章,该文章指出解决方案是使用Response.Redirect而不是Server.Transfer

我更改了命令并得到了更准确的“ 404 错误消息”,而不是神秘的“执行子请求时出错”消息。

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

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

于 2014-02-21T17:00:17.513 回答
4

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

于 2012-10-18T14:54:27.440 回答
2

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

于 2019-07-12T16:04:54.970 回答
0

Server.Transfer("mywebpage.aspx")似乎仅在会话已经存在时才起作用。

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

于 2014-05-28T11:58:36.247 回答
0

我遇到了同样的问题,并发现它与 Server.Transfer 运行位置和重定向到的位置的相对路径有关。就我而言,这是在子目录中执行的,因此@ray 的答案(将 ../ 添加到 URL 的开头)有效。然而,当我在上面的目录中执行时,同样的事情发生了。因此,我改为使用有根路径:

Server.Transfer("~/errorpage.aspx")
于 2016-09-27T17:49:05.430 回答
-1

这不是错误,这是设计使然。请参阅http://support.microsoft.com/kb/320439

于 2010-03-02T10:01:43.910 回答