[英]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.