2013-02-24 26 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