2010-09-27 91 views
1

我有這樣的自定義錯誤在我的web.config文件重定向但它似乎並沒有工作,因爲我加入了redirectMode="ResponseRewrite"自定義404錯誤不正確重定向

它工作正常的500錯誤,但不是404(它只是當我有一個404)

不重定向下面是web.config

<customErrors mode="On" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="/servererror/default.aspx" /> 
    <error statusCode="500" redirect="/servererror/default.aspx" /> 
</customErrors> 

的代碼,這是我的servererror/default.aspx代碼

Dim err As System.Exception = Server.GetLastError() 

Dim Errormail = New MailMessage 

    'Send email to Bondholder using email address from form 
    Errormail.To   = "[email protected]" 

    Errormail.From   = "[email protected]" 
    Errormail.Subject  = "Server Error Alert" 
    Errormail.BodyFormat = MailFormat.Text 
    Errormail.Priority  = MailPriority.Normal 
    Errormail.Body   = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString()) 

    SmtpMail.SmtpServer = "localhost" 

    SmtpMail.Send(Errormail) 

我需要保持redirectMode="ResponseRewrite"使得servererror/default.aspx給我發來電子郵件時有一個錯誤

任何幫助,將不勝感激

感謝

傑米

UPDATE

我看了一下網頁,發現不少其他人有相同的問題,但我找不到明確的答案。

任何想法

感謝

傑米

+0

如果你試圖打開nonexistingpage.htm它不應該工作的免費應用程序頁面的HTTP狀態代碼,這是怎麼回事,除非如果你使用IPM。 – Tomasi 2010-09-27 14:37:45

+0

什麼是IPM?對不起,我是一個新手 – 2010-09-27 15:38:58

回答

3

我相信你所看到的普通的.NET時,頁面無法找到?

解決方案如下所示。注意添加〜爲路徑:

<customErrors mode="On" redirectMode="ResponseRewrite"> 
     <error statusCode="404" redirect="~/servererror/default.aspx"/> 
     <error statusCode="500" redirect="~/servererror/default.aspx"/> 
    </customErrors> 

UPDATE:

雖然你的解決方案的工作,這是一個有點哈克 - 尤其是你已經使用會話狀態的方法是皺起了眉頭大規模應用或其他更經驗豐富的開發人員。我建議將500和404錯誤分解到不同的頁面上。

如果您的網站通過網絡可用,則向真實用戶顯示不同的錯誤消息是有用的,即如果他們正在尋找的頁面已經消失(404)或存在一些臨時性問題(500)並且它可能是好主意稍後再回來看看。每頁錯誤的文字應該相應地反映這一點。向搜索引擎報告適當的狀態代碼以指示頁面是否不再可用,也就是說,它已從您的項目中刪除並應從搜索引擎索引中刪除,或者如果出現錯誤並且搜索引擎應該返回以後抓取頁面,而不是從索引中刪除。不正確地報告這些狀態代碼可能會通過搜索引擎影響您的網絡應用程序的性能。通常我的web.config讀取如下:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx"> 
    <error statusCode="404" redirect="~/NotFound.aspx"/> 
</customErrors> 

注意:它有「defaultRedirect」屬性設置很重要,因爲在.NET Framework(問谷歌)在最近發現的安全漏洞。設置這是一個解決方案來堵塞漏洞。

要向客戶端(和搜索引擎機器人)報告正確的HTTP狀態代碼,您可以使用下面的代碼。簡單地將它們放置在相關頁面的頁面加載事件:

500錯誤:

Response.Status = "500 Internal Server Error" 

404錯誤:

Response.Status = "404 Not Found" 

現在,您可以在Global.asax刪除代碼併爲您的錯誤電子郵件邏輯創建一個可從每個頁面調用的共享函數。如果你願意,你可以將上面的代碼合併到你現有的錯誤頁面中,但是我總是喜歡將它們分開,因爲我發現它很整潔。

如果你想測試我建議考慮看看所謂Fiddler

+0

嗨我試過,但仍然給我的通用頁面無法找到錯誤 – 2010-09-27 15:38:40

+0

這絕對適合我。順便說一下,您的應用程序面向網絡,即您希望通過搜索引擎提供它嗎? – BradB 2010-09-27 15:45:53

+0

嗨是啊它是通過搜索引擎可以看到我的回答我發佈了似乎解決了我的問題 – 2010-09-27 16:32:46