2010-03-02 108 views
28

我在C#2.0中有一個HttpModule,它處理拋出的異常。無論何時拋出異常,都會調用帶有一些查詢字符串的錯誤頁面(aspx)。它通過Server.Transfer()完成。Server.Transfer拋出執行子請求的錯誤。如何解決?

但當控制試圖執行Server.Transfer(),以下拋出異常:

錯誤執行爲[頁面名]的.aspx子請求。

鑑於Request.Redirect()工作正常。

我試着在傳送請求的頁面的Page指令中設置EnableViewStateMac="false"。仍然存在問題。

這裏是我試過的代碼:

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

任何想法,這可怎麼解決?

+0

問題是IIS_IUSER的權限。 – 2016-04-20 13:53:13

回答

18

我發現()替代Server.Transfer的

我用

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

這解決了這個問題。

+6

你是如何使用它的?異常*執行子請求*錯誤消失,但我得到一個空白頁面。 – 2010-08-20 13:07:24

+0

你必須在IHttpModule中完成。請參閱http://msdn.microsoft.com/en-us/library/ms972974.aspx(不幸的是,文章過長,實際的概念非常簡單)。 – mhenry1384 2011-09-28 20:24:30

+0

如果你有'Server.Transfer',你可以直接調用'Context.RewritePath',而不需要調用'HttpContext.Current'來獲得一個HttpContext對象:) – 2014-06-10 10:59:09

0

這不是一個錯誤,它是由設計。請參閱http://support.microsoft.com/kb/320439

+2

是的,我已經看到了。但我有一個要求,不要更改地址欄上的網址。 – Amit 2010-03-02 11:35:39

+3

他沒有重定向到ASP – JNF 2013-08-01 08:22:37

+0

它發生在無論你重定向。 – Jamie 2013-12-20 11:29:40

4

如果您在調試期間發現VS.NET IDE中出現此異常,請至少進行一次,然後按F5繼續調試。在我的情況下,實際的頁面確實呈現與ASP.NET異常是真的造成的問題。在我的情況下,我有一個格式錯誤的asp:ChangePassword控件,它實際上是導致「執行子請求錯誤」異常。

+0

這就是它......謝謝 – unexplored 2012-11-20 18:05:20

+0

我相信這也暴露在異常的'InnerException'屬性中。在我的情況下,這是一個缺少的用戶控件。 – 2013-01-14 16:00:31

6

我的修復是不同的:

在線查詢產生this Microsoft Knowledge Base article其中指出該決議是使用的Response.Redirect,而不是Server.Transfer的

我改變命令,並獲得更精確的「404錯誤消息」而不是隱蔽「錯誤執行子請求」消息。

這導致我檢查重定向字符串,我注意到我的路徑已關閉。

我將傳輸字符串從「ErrorPage.aspx」修復爲「../ErrorPage.aspx」(注意路徑更改),並且Server.Transfer工作得很好。

+0

我發現我需要將其更改爲「〜/ ErrorPage.aspx」,否則當我從子目錄移至應用程序根目錄時,它將停止工作(請參閱我的回答) – Tevin 2016-09-27 17:50:18

0

Server.Transfer(「mywebpage.aspx」)似乎只在會話已經存在時才起作用。

如果沒有啓動會話,則會引發此錯誤,因此您必須使用響應。重定向或其他方法。

10

我掛在OnPreRequestHandlerExecute事件的請求管道中,發現我無法使用Server.Transfer,因爲它拋出了與執行子請求相同的錯誤。

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

如果您使用的是IIS 7及更高版本,則可以使用Server.TransferRequest,而不是爲我伎倆。

這兩種方法之間的差異都屬於這樣的回答:TransferRequest vs Transfer in ASP.Net

+0

這很好。 – 2015-12-03 18:43:06

0

我有同樣的問題,並發現它與Server.Transfer的運行時所在的相對路徑做的,你在哪裏重定向至。在我的情況下,這是在一個子目錄中執行的,所以@ ray的答案(添加../到URL的開頭)工作。但是,當我在上面的目錄中執行時,發生了同樣的事情。因此,我更改爲使用根路徑:

Server.Transfer("~/errorpage.aspx") 
相關問題