【问题标题】:MessageHandlers vs Filters in asp.net mvc web api projectasp.net mvc web api项目中的MessageHandlers vs Filters
【发布时间】:2013-02-24 13:54:49
【问题描述】:

使用 MessageHandler 与 Filter 在 MVC Web api 项目的请求标头中检查 API 密钥有什么区别。

我看到 http://www.asp.net/web-api/overview/working-with-http/http-message-handlers 中有一个很好的 MessageHandler 示例用于此目的

例如

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

但看起来我也可以使用过滤器来做同样的事情。

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

假设 ApiKeyFilter 和 ApiKeyHandler 都只是查看请求头并检查 api 密钥,哪种方式更有效?有什么区别?

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api


    【解决方案1】:

    MessageHandler 比过滤器运行得更早。

    顺序是:

    -消息处理程序

    -授权过滤器

    -模型绑定

    -其他过滤器

    安全相关的东西应该尽早运行。

    【讨论】:

    • 如果我只想检查请求和响应,例如只记录请求和响应有效负载,那么应该首选什么?因为过滤器和处理程序可以处理这个。处理程序也可以是每个路由特定的。所以“安全相关的东西”是每个用例的唯一区别?
    • 这是关于范围和执行顺序的。由于消息处理程序似乎在 vnext 中消失了 - 我宁愿使用 Katana 中间件进行日志记录。
    • 谢谢,我仍然很困惑。只是为了让我的基础知识正确,请假设现在我们没有武士刀。如果我使用过滤器进行日志记录,会有任何缺点。我知道对于需要执行非常早的处理程序的东西应该使用。但假设我对日志没有任何此类要求,那么这是一个更好的选择(处理程序或过滤器)。日志只是我引用讨论的一个例子。再次感谢
    • 日志不能作为一个例子——因为它取决于你在做什么;)如果你不关心你的代码在管道中的哪个点被执行,那么没关系.
    • 谢谢,“如果您不关心代码在管道中的哪个点执行,那么没关系”回答了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2012-04-04
    相关资源
    最近更新 更多