在 ASP.NET Core 中使用 HTTP 标头传播详情
前言
我们常用 JWT 令牌用于身份验证,前端一般是在请求中包含 HTTP 标头 Authorization 实现。
但是,当服务间需要互相调用时,也需要"按原样"将标头传播到目标服务。
原来的解决方案是从请求中读取标头,并将其添加到对外请求标头集合中。
后来发现,微软已经考虑了这种场景,并提供了专门的中间件来解决这个需求。
Demo
下面,我们创建 ServerA、ServiceB 两个 Web API 项目来演示这一功能。
首先,ServiceB 有一个 GET 方法,返回在请求中收到的所有标头,这使我们能够验证标头是否被传播:
public IHeaderDictionary Get() { return Request.Headers; }
执行 ServiceB 的 GET 请求,我们可以类似下图的响应:
现在,用 ServiceA 调用 ServiceB 并返回响应。
这将向我们显示哪些标头传播到 ServiceB:
public async Task<string> Get() { var client = _clientFactory.CreateClient("ServiceB-Client"); var response = await client.GetAsync("/ServiceB"); return await response.Content.ReadAsStringAsync(); }
执行 ServerA 的 GET 请求,可以看到,Authorization 标头并没有被传播:
这时,我们可以引用 Nuget 包 Microsoft.AspNetCore.HeaderPropagation,并且修改 Startup.cs 启用标头传播功能:
public void ConfigureServices(IServiceCollection services) { // 定义需要传播的标头 services.AddHeaderPropagation(options => options.Headers.Add("Authorization")); services.AddHttpClient("ServiceB-Client", options => options.BaseAddress = new Uri("http://localhost:57516")) // 定义开启标头传播 .AddHeaderPropagation(); ...... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 添加标头传播middleware app.UseHeaderPropagation(); ...... }
再次执行 ServerA 的 GET 请求,可以看到,Authorization 标头被正确传播了:
结论
标头传播中间件允许我们轻松地将标头从一个请求传播到另一个请求。
可用于下列场景:
- 授权令牌
- 语言选择
- 分布式跟踪请求链
- 浏览器信息
- 其他自定义信息
到此这篇关于在 ASP.NET Core 中使用 HTTP 标头传播详情的文章就介绍到这了,更多相关ASP.NET Core 用标头传播内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
.NET 6开发TodoList应用之使用AutoMapper实现GET请求
我们希望接受的请求和返回的值具有以下两点需要遵循的原则:每个model被且只被一个API消费;每个model里仅仅包含API发起方希望包含的必要字段或属性。AutoMapper库就是为了实现这个需求而存在的。本文将为大家介绍AutoMapper如何实现GET请求,需要的可以参考一下2021-12-12FileUpload上传图片前实现图片预览功能(附演示动画)
FileUpload控件上传图片前实现预览,很多网友都希望实现这样的功能,本人总结了一下,感兴趣的朋友可以参考一下,希望对您有帮助2013-01-01ASP.NET中为TextBox中添加calendar.js示例代码
为TextBox中添加calendar.js对于一些新手朋友确实有点难度,下面为大家介绍下ASP.NET中具体的实现方法2013-11-11asp.net Repeater 数据绑定的具体实现(图文详解)
此例子绑定的数据源为微软在mssql2000中提供的Northwind数据库中的表Categories。2013-07-07
最新评论