【问题标题】:Access Session Values in a AddHttpMessageHandler Method在 AddHttpMessageHandler 方法中访问会话值
【发布时间】:2020-04-17 04:26:58
【问题描述】:

我正在尝试创建一种通用方式来将我的访问令牌添加到 Razor 应用程序中的拨出呼叫中。我跟着documentation 通过AddHttpMessageHandler 添加了DelegatingHandler

services.AddHttpClient("MyName").AddHttpMessageHandler<AddAuthorizationHeaderHandler>();

我的处理程序被正确调用,但我找不到获取包含访问令牌的会话值的方法(因此我可以将其添加为标头)。

ASP.Net Core 将此值存储在 cookie 中。在我页面的“代码背后”中,我可以通过HttpContextPageModel 类的公共成员)获取值。像这样:

var accessToken = await HttpContext.GetTokenAsync("access_token");

我的问题是我无法在我的DelegatingHandler 中找到访问此HttpContext 的方法。

如何在我的DelegatingHandler 中获得access_token 的会话值?

【问题讨论】:

  • 显示处理程序。为什么不直接将IHtpContextAccessor 注入到委托处理程序中

标签: c# asp.net-core cookies asp.net-core-3.1


【解决方案1】:

IHtpContextAccessor 注入委托处理程序

private readonly IHttpContextAccessor accessor;

public AddAuthorizationHeaderHandler(IHttpContextAccessor accessor) {
    this.accessor = accessor
}

这样您就可以访问上下文

AddAuthorizationHeaderHandler.SendAsync

//...

var accessToken = await accessor.HttpContext.GetTokenAsync("access_token");

//...

确保在服务集合中注册它

services.AddHttpContextAccessor();

【讨论】:

  • 效果很好!我不知道它会对类进行依赖注入。谢谢!
猜你喜欢
  • 2018-04-18
  • 2011-06-13
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多