我正在開發一個在asp.net MVC3中的應用程序,我有以下問題: 什麼時候應該寫一個HTTP模塊,什麼時候應該寫一個動作過濾器?在asp.net-mvc中HTTP模塊vs動作過濾器
回答
過濾器是更多的MVC方法做事情,而Http模塊更多的是ASP.NET做事情的方式。兩者通過在處理管道中提供掛鉤來達到類似的目的。
HttpModule更通用,並且您希望在每個請求上處理某些內容。過濾器可用於添加特定於行爲的行爲。
如果您希望每個Http請求只執行一次,您應該使用HttpModule。 ActionFilter可能會在請求期間執行多次,除非您檢查IsChildActionOn。
的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路由和操作方法之間的抽象層。通過動作過濾器,我們可以將相同的邏輯應用於多個控制器或動作方法。例如,自定義日誌記錄。
在執行請求處理程序之前和之後調用HttpModule。它們旨在讓開發人員攔截,參與或修改每個請求。有22個可用的事件可以訂閱,使模塊能夠在流程的各個階段處理請求。這些事件對於希望在引發關鍵請求管道事件時運行代碼的頁面開發人員非常有用。如果您正在開發自定義模塊並且希望爲管道的所有請求調用模塊,則它們也很有用。
過濾器被設計爲在MVC請求生命週期之間注入邏輯。特別是在調用de動作之前和之後,以及在處理結果之前和之後。過濾器爲用戶提供了強大的方式來檢查,分析,捕獲和管理MVC項目中的幾件事情。作爲MVC5的,共有5種類型的過濾器:
- 認證
- 授權
- 行動
- 結果
- 異常
所以,如果你想攔截,參與,或在具體的修改22 events in the http request pipeline中選擇模塊。如果你的邏輯是嚴格相關的操作方法你更好的服務器覆蓋以下ActionFilterAttribute方法之一:
- OnActionExecuting
- OnActionExecutted
- OnResultExecuting
- OnResultExecuted
- 1. 授權過濾器vs動作過濾器
- 2. 切片VS過濾器在終極版中刪除動作
- 3. Svg過濾器vs CSS過濾器 - 模糊性能差異
- 4. HTTP處理程序vs HTTP模塊
- 5. ISAPI過濾器和ASP .Net Http模塊的區別
- 6. 用動作過濾器查看模型
- 7. Django:object_set vs過濾器
- 8. Servlet vs過濾器
- 9. 共同行動過濾器或HTTP模塊用於asp.net的MVC Web服務
- 10. 模塊覆蓋過濾器列表時的過濾器警告
- 11. Django模塊過濾
- 12. 塊中的模板沒有正確運行過濾器中的過濾器
- 13. MVC3:分組動作過濾器或調用來自其他動作過濾器的動作過濾器
- 14. 您如何在模塊化控制器中使用過濾器?
- 15. 在動作過濾器中實例化視圖模型?
- 16. angularjs過濾器不與$ http工作
- 17. Isapi過濾器到Apache模塊
- 18. Nginx過濾器模塊安裝
- 19. Django模塊過濾器,減少查詢
- 20. K2標籤模塊過濾器(Joomla 2.5)
- 21. angularJS全局過濾器模塊
- 22. NGINX頭和身體過濾器模塊
- 23. 動作過濾器屬性
- 24. 動作過濾器異常
- 25. 動作過濾器動作參數
- 26. Apache HTTP服務器中的過濾器
- 27. Django過濾器vs排除
- 28. WordPress的過濾器VS. action
- 29. Subversion使用SSPI模塊HTTP vs HTTPS
- 30. itertools.ifilter VS.過濾器VS.列表解析