2012-07-16 66 views

回答

22
  1. 過濾器是更多的MVC方法做事情,而Http模塊更多的是ASP.NET做事情的方式。兩者通過在處理管道中提供掛鉤來達到類似的目的。

  2. HttpModule更通用,並且您希望在每個請求上處理某些內容。過濾器可用於添加特定於行爲的行爲。

  3. 如果您希望每個Http請求只執行一次,您應該使用HttpModule。 ActionFilter可能會在請求期間執行多次,除非您檢查IsChildActionOn。

1

的HttpModule是IIS如何讓一個Web應用程序,以覆蓋默認行爲或者通過讓您將事件處理程序的HttpApplication事件添加自定義邏輯。 即使使用不同的IIS模式(集成或經典)也具有不同的Web.config設置。
參考:
http://msdn.microsoft.com/en-us/library/ms227673(v=vs.100).aspx

實施例:重定向非www到www網址

public void Init(HttpApplication application) 
{ 
    application.PreRequestHandlerExecute += this.Application_PreRequestHandlerExecute; 
} 

private void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    Uri requestUrl = HttpContext.Current.Request.Url; 
    string host = requestUrl.Authority.ToLower(); 
    if (!host.StartsWith("www")) 
    { 
     HttpContext.Current.Response.Redirect(requestUrl.Scheme + "://www." + host + requestUrl.PathAndQuery); 
     HttpContext.Current.Response.End(); 
    } 
} 

一種措施篩選是裝飾控制器或動作方法的一個屬性。它是MVC路由和操作方法之間的抽象層。通過動作過濾器,我們可以將相同的邏輯應用於多個控制器或動作方法。例如,自定義日誌記錄。

2

在執行請求處理程序之前和之後調用HttpModule。它們旨在讓開發人員攔截,參與或修改每個請求。有22個可用的事件可以訂閱,使模塊能夠在流程的各個階段處理請求。這些事件對於希望在引發關鍵請求管道事件時運行代碼的頁面開發人員非常有用。如果您正在開發自定義模塊並且希望爲管道的所有請求調用模塊,則它們也很有用。

過濾器被設計爲在MVC請求生命週期之間注入邏輯。特別是在調用de動作之前和之後,以及在處理結果之前和之後。過濾器爲用戶提供了強大的方式來檢查,分析,捕獲和管理MVC項目中的幾件事情。作爲MVC5的,共有5種類型的過濾器:

  • 認證
  • 授權
  • 行動
  • 結果
  • 異常

所以,如果你想攔截,參與,或在具體的修改22 events in the http request pipeline中選擇模塊。如果你的邏輯是嚴格相關的操作方法你更好的服務器覆蓋以下ActionFilterAttribute方法之一:

  • OnActionExecuting
  • OnActionExecutted
  • OnResultExecuting
  • OnResultExecuted