使用 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 策略