2013-02-24 27 views
7

使用MessageHandler與過濾器檢查MVC Web api項目的請求標頭中的API密鑰之間有什麼區別。MessageHandlers vs asp.net mvc web api項目中的過濾器

我看到有僅針對該目的的的MessageHandler在http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

例如井概述示例

GlobalConfiguration.Configuration.MessageHandlers.Add(new ApiKeyHandler()); 

但它看起來像我可以使用過濾器也做同樣的事情。

GlobalConfiguration.Configuration.Filters.Add(new ApiKeyFilter()); 

假設ApiKeyFilter和ApiKeyHandler都只看請求頭,並檢查API密鑰,哪種方法更有效?有什麼不同?

回答

6

MessageHandlers比過濾器運行得早得多。

的順序是:

-MessageHandler

-Authorization過濾

- 模型結合

- 其他過濾器

安全相關的東西應該儘可能早地運行。

+0

如果我只是想檢查請求和響應,例如只記錄請求和響應負載,那麼應該優先選擇什麼?因爲過濾器和處理程序可以處理這個。處理程序也可以按照特定的路由。所以當涉及到每個用例時,「安全相關的東西」是唯一的區別對象? – 2014-05-27 05:46:34

+1

這是關於範圍和執行順序。由於消息處理程序似乎在vnext中消失 - 我寧願使用Katana中間件進行日誌記錄。 – leastprivilege 2014-05-27 09:33:32

+0

謝謝,我仍然困惑。只是爲了讓我的基本權利現在假設我們沒有katana.if我使用過濾器進行日誌記錄會有任何缺點。我明白,對於那些需要執行很早的處理程序的東西應該使用。但假設我沒有任何這樣的需求與日誌記錄,那麼這是一個更好的選擇(處理程序或過濾器)。日誌記錄只是一個例子,我引用了討論。再次感謝 – 2014-05-27 10:13:07