2012-02-06 81 views
2

Im使用名爲EPiServer的CMS產品。我們需要創建我們自己的顯示404的方法,這是使用.NET的標準customErrors無法實現的。我們已經撰寫了一個模塊,我們用它來檢查HttpStatusCode。我們在EndRequest方法中執行此操作。ASP.NET 404 httpmodule

如果狀態是404,我們查詢EPiServer爲適當的404頁,然後在該頁面傳輸請求。然而,這並不返回404,即使我做了以下的正確狀態心不是返回:

HttpContext.Current.Response.StatusCode = 404; 
HttpContext.Current.Response.StatusDescription = "Page not Found"; 
HttpContext.Current.Server.TransferRequest(newPage); 

同樣,如果我做的Response.Redirect,而不是TransferRequest那麼它不是一個正確的404,因爲URL有再改......

請告訴我這樣做的正確方法嗎?

在此先感謝 鋁

+0

你有沒有嘗試過這樣的:http://stackoverflow.com/questions/5966613/process-html-files-with-httpmodule-to-catch-404-錯誤 - 上IIS7 – 2012-02-06 10:55:06

回答

0

您應該在您用於404頁面的模板的代碼隱藏中設置狀態代碼。

如果這是一個普通的內容頁面,創建一個新的模板或代碼添加一個狀態代碼屬性頁面,背後的邏輯發送適當的頭,如果這不是空。

0

嘗試設置你傳送到頁面上的狀態代碼 - 在您的錯誤頁面模板。我不確定是否需要單獨的模塊 - 您可以簡單地處理Global.asax.cs中的HttpApplication的錯誤事件。

0

感謝您的回覆。

其實我做了這個工作如下:

在EndRequest事件處理程序,我把該請求關閉到正確的EPiServer頁,幷包括在呼叫即

app.Context查詢字符串PARAM .Server.TransferRequest(pageUrl +「& internal = true」);

然後在PostRequestHandlerExecute事件中,我檢查查詢字符串PARAM,如果存在的話那隻能是因爲它是一個404,所以我返回正確的狀態:

HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.StatusDescription =「找不到頁面」;

工程就像一個魅力。

感謝 higgsy

1

您正在使用哪個IIS版本?對於IIS7或7.5,您可能需要這樣的:

<httpErrors errorMode="Custom"> 
     <remove statusCode="404" /> 
     <error statusCode="404" path="/somenotfoundpage.aspx" responseMode="ExecuteURL" /> 
     <remove statusCode="500" /> 
     <error statusCode="500" path="/someerrorpage.aspx" responseMode="ExecuteURL" /> 
</httpErrors>