使用 IHttpClientFactory 设置默认请求标头

Posted

技术标签:

【中文标题】使用 IHttpClientFactory 设置默认请求标头【英文标题】:Set a default request header using IHttpClientFactory 【发布时间】:2021-02-05 11:58:00 【问题描述】:

我正在开发一个 ASP.NET Core MVC 应用程序,我想在用户到达某个页面时为每个请求设置一个授权标头。我正在尝试使用 HttpClient 类中的 DefaultRequestHeaders.Authorization。 但是,它只是没有设置标题。 这是我的代码:

启动

public void ConfigureServices(IServiceCollection services)

    services.AddHttpClient();
    //Some more code

控制器

public class MyController: Controller

    private readonly System.Net.Http.IHttpClientFactory _clientFactory;

    public MyController(System.Net.Http.IHttpClientFactory clientFactory)
    
         _clientFactory = clientFactory;
    

    public IActionResult MethodWhichIWantToSetTheToken()
    
        var client = _clientFactory.CreateClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(JwtBearerDefaults.AuthenticationScheme, "veryBigTokenHere");
         
       string abc = Request.Headers["Authorization"]; //Yeah, it's null!
       return View();
    

【问题讨论】:

Request.Headers["Authorization"] 从到达控制器的请求中获取标头。 client.DefaultRequestHeaders.Authorization 是在 HttpClient 中设置头部,这意味着通过 HttpClient 发送的所有请求都会设置头部。 你是说如果我在另一个控制器中写那行我会得到值吗? 您如何使用HttpClient,您是否使用HttpClient 发送一些请求? 我没有在其他任何地方使用 HttpClient HttpClient 与您的控制器没有任何共同之处。 HttpClient 可用于向某个服务器发送 HTTP 请求。您的控制器接收 HTTP 请求并返回 HTTP 响应。如果您想在控制器中接收 Authorization 标头,则必须从您的 UI(或调用您的端点的其他客户端)发送它。如果您想在您的应用中启用身份验证(或授权),我建议您访问docs.microsoft.com/en-us/aspnet/core/security/authentication/… 并阅读官方文档。 【参考方案1】:

代替

  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(JwtBearerDefaults.AuthenticationScheme, "veryBigTokenHere");

使用

 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "veryBigTokenHere");

【讨论】:

是的,它仍然会显示为空。正如 David Kaya 所写“HttpClient 与您的控制器没有任何共同之处。HttpClient 可用于将 HTTP 请求发送到某些服务器。”但是如果你需要发送 httprequest 来获取 API 数据(例如)你必须使用我写的语法。如果你想在请求之间保留一个令牌,你可以使用 cookie 或隐藏字段或 bagview etc....

以上是关于使用 IHttpClientFactory 设置默认请求标头的主要内容,如果未能解决你的问题,请参考以下文章

如何为每个 url 使用 Polly 和 IHttpClientFactory

在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求

Net Core 3.1 IHttpClientFactory/HttpClient 第一次请求慢

通过 IHttpClientFactory 忽略 SSL 连接错误

如何在ASP.NET Core 中使用IHttpClientFactory

如何使用 Moq 从 IHttpClientFactory 模拟 HTTPClient 并结合 .NET Core 中的 Polly 策略