Owin中间件VS WebAPI DelegatingHandler

时间:2016-08-01 20:27:33

标签: c# .net asp.net-web-api owin

我正在阅读文章和检查exmaples,我看到Owin Middlewares与WebAPI DelegatingHandler的使用方式相同:记录传入的请求,验证标题等等。

我唯一的理解是Owin Middleware出现在管道中的DelegatingHandlers之前。因此,如果您创建一个Owin中间件,让我们说用户授权,您就可以在较低级别更快地拒绝禁止请求。

两者之间有什么不同,或者使用它们中的任何优点/缺点?

4 个答案:

答案 0 :(得分:3)

我也正在研究这个以找出差异。我可以想出一些可能对你有帮助的想法。我认为它们的目的是相同的,而不是那么不同。但DelegatingHandler是与owin相比较旧的机制 Owin中间件:

  1. 这样做的目的是将服务器和应用程序分开。通过这样做,您可以向管道注入大量模块(称为owinmiddleware)。
  2. 通过执行此操作,您可以在web api的HttpMessageHandler处理之前在httprequest的早期阶段拦截请求。例如。您可以在创建http控制器之前读取用于初始化依赖关系的数据。
  3. 通过执行模块,您可以重用asp.net核心所关注的中间件。
  4. DelegatingHandler:

    1. 这是网络API的一部分。在这个级别,我们有HttpRequestMessage,HttpResponseMessage,所以我们可以轻松地操作那些而不是owin中间件(例如,你可以从请求消息体中读取数据,而不用担心我们做了影响消息的事情)

    2. 通过这样做,实际上,您非常依赖web api管道。我并不是说你不能在未来重复使用它,但它可能会发生。

    3. 希望它能为您提供有用的信息。

      谢谢,

答案 1 :(得分:2)

owin middle ware和web API委托处理程序之间的区别之一是 通过委托处理程序,您可以为特定路由编写自定义消息处理程序。

答案 2 :(得分:0)

Owin中间件根据您在IAppBuilder上设置的身份验证类型隐式执行某些身份验证操作。 例如:

  1. 从请求标头读取承载Jwt令牌。
  2. 与发行者一起验证Jwt令牌的签名证书。
  3. 检查Jwt令牌的开始和结束时间
  4. 执行在TokenValidationParameters中设置的其他验证。
  5. 为请求的上下文设置标识“ ClaimsPrincipal”

API委托处理程序将整个控制权交给您。以上所有检查都需要在一个或一系列处理程序中手动实施。

答案 3 :(得分:0)

我最近从this博客文章中了解了有关使用OWIN中间件进行身份验证的信息。

这就是它的意思:

使用OWIN中间件的优点是可以建立身份 中间件中的所有框架都可以共享 应用。例如,如果您使用的是两个框架,请说ASP.NET Web API和SignalR,在OWIN中间件中建立的标识 将适用于两个框架。如果您使用消息处理程序, 身份仅适用于ASP.NET Web API。

也请查看this stackoverflow答案。