前言

我们常用 JWT 令牌用于身份验证,前端一般是在请求中包含 HTTP 标头 Authorization 实现。

但是,当服务间需要互相调用时,也需要"按原样"将标头传播到目标服务。

原来的解决方案是从请求中读取标头,并将其添加到对外请求标头集合中。

后来发现,微软已经考虑了这种场景,并提供了专门的中间件来解决这个需求。

Demo

下面,我们创建 ServerA、ServiceB 两个 Web API 项目来演示这一功能。

首先,ServiceB 有一个 GET 方法,返回在请求中收到的所有标头,这使我们能够验证标头是否被传播:

[HttpGet]
public IHeaderDictionary Get()
{return Request.Headers;
}

执行 ServiceB 的 GET 请求,我们可以类似下图的响应:

现在,用 ServiceA 调用 ServiceB 并返回响应。这将向我们显示哪些标头传播到 ServiceB:

[HttpGet]
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)
{// 添加标头传播middlewareapp.UseHeaderPropagation();......
}

再次执行 ServerA 的 GET 请求,可以看到,Authorization 标头被正确传播了:

结论

标头传播中间件允许我们轻松地将标头从一个请求传播到另一个请求。

可用于下列场景:

  • 授权令牌

  • 语言选择

  • 分布式跟踪请求链

  • 浏览器信息

  • 其他自定义信息

想了解更多内容,请关注我的个人公众号”My IO“

在 ASP.NET Core 中使用 HTTP 标头传播相关推荐

  1. ASP.NET Core中的响应压缩

    介绍 响应压缩技术是目前Web开发领域中比较常用的技术,在带宽资源受限的情况下,使用压缩技术是提升带宽负载的首选方案.我们熟悉的Web服务器,比如IIS.Tomcat.Nginx.Apache等都可以 ...

  2. ASP.NET Core中的内存缓存

    ASP.NET Core中的内存中缓存 让我们看看如何通过缓存优化ASP.NET Core应用程序性能 我相信,在我们的工作中,每个人都收到来自客户的请求或来自我们应用程序用户的反馈,以提高响应速度. ...

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

    1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...

  4. ASP.NET Core 中的静态文件

    1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...

  5. 在ASP.NET Core中使用brotli压缩

    Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ...

  6. ASP.NET Core 中 HttpContext 详解与使用 |

    ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 笔者没有学 ASP.NET,直接学 ASP.NET Core ,学完 A ...

  7. 如何在ASP.NET Core中创建自定义AuthorizeAttribute?

    本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...

  8. 如何使用C#在ASP.NET Core中轻松实现QRCoder

    by Yogi 由瑜伽士 如何使用C#在ASP.NET Core中轻松实现QRCoder (How to easily implement QRCoder in ASP.NET Core using ...

  9. asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用

    分享一篇文章,关于asp.net core中httpcontext的拓展. 现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用 ...

最新文章

  1. 本地实现ES6转ES5代码——gulpfile配置文件
  2. 【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
  3. Java进阶:Semaphore信号量基本使用
  4. 数据之“星”汇聚,第三届「星斗奖」申报正式启动!
  5. 软件测试工程师核心竞争力(转)
  6. 修改win10我的文档下载等移动别处
  7. 的生物合成方式主要包括_J EXP BOT 综述| 植物次级代谢产物在调控微生物组组分及功能中的作用...
  8. php面向对象链,php面向对象之链式操作
  9. 计算机应用基础辅导资料,《计算机应用基础》辅导资料三
  10. 解决在使用Java API操作HBase中出现的Could not locate executable null\bin\winutils.exe in the Hadoop binaries.错误
  11. 解决谷歌浏览器自带的谷歌翻译无法翻译问题
  12. 【03】Linux笔记
  13. 加拿大玩具巨头斯平玛斯特在华确权维权,爆丸专利获赔超千万,汪汪队品牌获刑事保护...
  14. NVIDIA边缘端设备(nano、tx2、xavier等)查看安装的jetpack版本
  15. 为Windows右键新建菜单添加菜单项
  16. Win2012 R2 安装Exchange Server2016
  17. Softer-NMS
  18. 复合效应 达伦哈迪_帕特里克·麦克哈迪(Patrick McHardy)和版权暴利
  19. 心理学学习(三) 感觉阈限
  20. 关注时事与新闻的意义

热门文章

  1. Tiny模板语言(VelocityPlus)初步入门
  2. lucene两个分页操作
  3. IOS开发--TextField
  4. centos 6安装报错
  5. 解决ssh使用一段时间断开的问题
  6. python下载安装搭建
  7. “.Net 社区大会”(dotnetConf) 2018 Day 1 主题演讲
  8. 自定义View 进度条
  9. mysql配置-django
  10. Proxy模式简介和用例