【发布时间】:2017-03-25 06:22:26
【问题描述】:
我正在开发 OWIN 托管的 ASP.Net WebApi2 微服务。我们使用 Autofac 作为依赖注入器。
当我的服务被调用时,我可以通过访问 owinContext.Request.User.Identity 来获取有关用户的信息。我的问题是当我必须调用另一个服务并传递用户信息时。我必须创建一个包含用户信息的授权令牌并将该令牌设置为 RequestMessage。
我想写一个可以放在“HttpClient-MessageHandler-Pipline”中的 DelegatingHandler。但是在 DelegatingHandler.SendAsync() 中,我需要访问当前的 OwinContext。
我想过不同的方法。但我真的希望有一些更简单、更不容易出错的东西(或者可能提示我如何使这种方法可行):
- 使用 Autofac 我无法轻松解决强制依赖问题:HttpClient 和因此 DelegatingHandler 被注册为 SingleInstance。但是 OwinContext 是在 LifeTimeScope 上注册的。所以我不能只将 OwinContext 注入到 DelegatingHandler 的构造函数中。
- 我可以编写一个 Owin-Middleware,在静态 System.Threading.AsyncLocal 变量上设置 OwinContext。在 DelegatingHandler 内部,我可以访问该静态变量。但是可变的全局变量对我来说真的很不对劲。
- 我根本不编写 DelegatingHandler。在我的 ServiceRepository(也可以在 LifeTimeScope 上注册)中,我必须手动构建所有 RequestMessages。然后很容易将 AuthorizationToken 设置到 RequestMessage 上。但不使用方便的方法,例如httpClient.PostAsJsonAsync() 带来了很多工作。
【问题讨论】:
标签: c# asp.net-web-api2 owin