簡體   English   中英

web.config中的自定義錯誤頁面,錯誤信息會丟失嗎?

[英]Custom error page in web.config, will error info be lost?

如果我的web.config具有:

<customErrors mode="Off" defaultRedirect="CustomErrorPage.aspx">
      <error statusCode="401" redirect="~/CustomErrorPage.aspx?statusCode=401" />
      <error statusCode="403" redirect="~/CustomErrorPage.aspx?statusCode=403" />
      <error statusCode="404" redirect="~/CustomErrorPage.aspx?statusCode=404" />
      ...
</customErrors>

現在在我的CustomErrorPage.aspx中,當沒有自定義錯誤頁面並將其輸出到瀏覽器時,如何獲得類似於我看到黃屏錯誤頁面的堆棧跟蹤信息?

或者,因為這將重定向到customerrorpage.aspx,錯誤在這一點上是否已經丟失並且我無法訪問異常信息?

這是一個具有復雜虛擬目錄等的舊應用程序,因此我現在可以輕松地刪除其中一個錯誤庫。

根據此SO帖子(http://stackoverflow.com/questions/343014/asp-net-custom-error-page-server-getlasterror-is-null),如果您正在運行.Net 3.5 SP1,則可以使用redirectMode屬性在您的customErrors元素上。

有關redirectMode的詳細信息: http : //msdn.microsoft.com/zh-cn/library/system.web.configuration.customerrorssection.redirectmode(v=vs.90).aspx

完成此操作后,您將可以從Server.GetLastError()訪問錯誤: http : //msdn.microsoft.com/zh-cn/library/system.web.httpserverutility.getlasterror.aspx

編輯:你會使用ResponseRewrite的模式redirectMode

迷路了 您甚至不在同一個請求中,因為它是通過重定向完成的。

最后一點本身就夠糟糕的了(將某人重定向到錯誤頁面的意義是什么?),但這會在這里影響您。 但是,通過在customErrors元素中添加redirectMode="ResponseRewrite" ,則可以解決此問題,並且還意味着Server.GetLastError()將起作用。

您可以在服務器上的某個文件中記錄錯誤(您需要在Global.asax.cs中添加Application_Error事件處理程序),或將其放在webconfig中以獲取帶有異常的黃屏。

在您的global.asax中,您可以捕獲錯誤並將其保存以在“錯誤”頁面中進行檢索。

您覆蓋Application_Error以捕獲錯誤。

異常不會丟失。 您可以調用Server.GetLastError()以獲取最后拋出的異常。

由於它返回Exception對象,因此您只需調用StackTrace即可獲取完整的堆棧跟蹤。

使用GetLastError,它使您(足夠多)可以獲得上一次發生的錯誤。

http://msdn.microsoft.com/zh-CN/library/system.web.httpserverutility.getlasterror.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM