我在採訪中被問到如何在ASP.Net MVC
中實現HTTP module
和HTTP handler
。我知道它們在ASP.Net中用於在調用aspx頁面之前編寫預處理邏輯。但在ASP.Net MVC我們有過濾器,所以我告訴他們我們使用過濾器。我給出了正確的答案嗎?ASP.Net MVC中的HTTP模塊和HTTP處理程序?
6
A
回答
5
動作過濾器僅允許您掛接到MVC特定事件,而HTTP模塊允許您掛接到ASP.Net事件,因此即使在MVC中,要實現HTTP模塊和HTTP處理程序,您也需要實現相應的界面。 另外,如果你希望你的功能只在每個Http Request中執行一次,你應該使用HttpModule。 ActionFilters可以在一次訪問服務器的過程中執行多次。 爲了解釋HTTP模塊和HTTP處理程序,MVC使用HTTP模塊和HTTP處理程序在請求鏈中注入預處理邏輯。
HTTP處理程序是基於擴展的預處理程序,而HTTP模塊是基於事件的預處理程序。例如,如果你想改變jpg
文件的處理方式,你將實現自定義的HTTP處理程序,而如果你想在處理請求期間執行額外的邏輯,你將實現一個自定義的HTTP模塊。對於特定的請求總是隻有一個HTTP處理程序,但可以有多個HTTP模塊。
要實施HTTP處理程序,請執行IHTTPHandler
類並實施方法ProcessRequest
和屬性IsResuable
。 IsResuable
屬性確定處理程序是否可以重用。
public class MyJpgHandler: IHttpHandler {
public bool IsReusable {
get {
return false;
}
}
public void ProcessRequest(HttpContext context) {
}
}
接下來我們需要指定哪一種請求將由我們的自定義處理程序web.config
文件進行處理:
<httpHandlers>
<add verb="*" path="*.jpg" type="MyJpgHandler"/>
</httpHandlers>
要實現一個HTTP模塊,我們需要實現IHttpModule
和註冊所需的事件在init
方法。舉個簡單的例子,如果我們想記錄所有請求:
public class MyHttpModule: IHttpModule {
public MyHttpModule() {}
public void Init(HttpApplication application) {
application.BeginRequest += new EventHandler(this.context_BeginRequest);
application.EndRequest += new EventHandler(this.context_EndRequest);
}
public void context_BeginRequest(object sender, EventArgs e) {
StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
sw.WriteLine("request began at " + DateTime.Now.ToString());
sw.Close();
}
public void context_EndRequest(object sender, EventArgs e) {
StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
sw.WriteLine("Request Ended at " + DateTime.Now.ToString());
sw.Close();
}
public void Dispose() {}
}
並註冊我們的模塊:
<httpModules>
<add name="MyHttpModule " type="MyHttpModule " />
</httpModules>
相關問題
- 1. HTTP模塊和HTTP處理程序
- 2. http處理程序和模塊WCF
- 3. http處理程序和asp.net mvc
- 4. HTTP處理程序vs HTTP模塊
- 5. asp.net HTTP處理程序
- 6. http處理程序asp.net
- 7. ASP.Net中的通用HTTP處理程序
- 8. 使用http模塊或http處理程序攔截C#中的文件下載?
- 9. c#和HTTP處理程序
- 10. 404在Asp.Net MVC(RC 5)中的HTTP錯誤處理程序
- 11. Asp.net自定義http處理程序之前另一個ashx http處理程序
- 12. Spring MVC - 通用HTTP處理程序
- 13. ASP.NET Http模塊序列 - 線程問題
- 14. 在asp.net中處理.csv文件的異步http處理程序
- 15. Global.asax或http處理程序
- 16. asp.net http處理程序和http模塊在沒有使用IIS的情況下工作嗎?
- 17. 處理來自GWT模塊的http cookie
- 18. HTTP處理程序問題
- 19. 調試HTTP處理程序
- 20. HTTP處理程序問題
- 21. 創建HTTP處理程序
- 22. 在asp.net應用程序中不運行http處理程序
- 23. HTTP處理程序來處理.zips
- 24. 自定義錯誤處理http模塊
- 25. 的Http處理程序加載錯誤
- 26. MVC路由和HTTP模塊的執行順序
- 27. 使用UI路由器和MVC訪問HTTP處理程序5
- 28. 轉移sitemap.xml HTTP請求到ASP.NET MVC中的路由處理程序
- 29. ASP.NET HTTP處理程序和全局變量
- 30. 自定義Http處理程序IIS7和ASP.NET
過濾器只能調用由控制器處理的請求。更一般的,你將不得不使用IHttpHandler和IHttpModule ...除非你在OWIN中,在這種情況下它將是一個OWIN中間件類。 – Dai
我沒有把你帶到這裏。我不確定OWIN –