【问题标题】:Set a default request header using IHttpClientFactory使用 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/… 并阅读官方文档。

标签: c# asp.net-mvc asp.net-core jwt


【解决方案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....
猜你喜欢
  • 2018-12-03
  • 2017-12-02
  • 2022-08-12
  • 2018-01-28
  • 2017-01-16
  • 2016-06-20
  • 2017-03-06
  • 2017-12-28
  • 2019-08-18
相关资源
最近更新 更多