在 ASP.NET Core 中使用 HTTP 标头传播详情

 更新时间:2022年04月12日 21:21:09   作者:My IO  
这篇文章主要介绍了在 ASP.NET Core 中使用 HTTP 标头传播详情,文章通过,我们创建 ServerA、ServiceB 两个 Web API 项目展开内容,需要的朋友可以参考一下

前言

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

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

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

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

Demo

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

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

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

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

在 ASP.NET Core 中使用 HTTP 标头传播_解决方案

现在,用 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 标头并没有被传播:

在 ASP.NET Core 中使用 HTTP 标头传播_自定义_02

这时,我们可以引用 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 标头传播_中间件_03

结论

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

可用于下列场景:

  • 授权令牌
  • 语言选择
  • 分布式跟踪请求链
  • 浏览器信息
  • 其他自定义信息

 到此这篇关于在 ASP.NET Core 中使用 HTTP 标头传播详情的文章就介绍到这了,更多相关ASP.NET Core 用标头传播内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • .NET使用RSA加密解密的方法

    .NET使用RSA加密解密的方法

    这篇文章主要为大家详细介绍了.NET使用RSA加密解密的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 如何使用ASP.NET MiniAPI 调试未匹配请求路径

    如何使用ASP.NET MiniAPI 调试未匹配请求路径

    ASP.NET MiniAPI是一个轻量级的Web API框架,它可以让我们快速地构建和部署RESTful服务,本文给大家介绍使用ASP.NET MiniAPI 调试未匹配请求路径的方法,感兴趣的朋友一起看看吧
    2024-01-01
  • 一个事半功倍的c#方法 动态注册按钮事件

    一个事半功倍的c#方法 动态注册按钮事件

    前几天在网上看见一个制作计算器的c#程序,其中有一个动态注册按钮事件,觉的很有用。于是实际操作了一哈, 确实比较好。
    2010-04-04
  • Visual Studio 2017 15.5 正式发布!性能再提升

    Visual Studio 2017 15.5 正式发布!性能再提升

    Visual Studio 2017 15.5 正式发布!性能再提升,时发布的还有 Visual Studio for Mac 7.3,亮点如下
    2017-12-12
  • .NET ORM框架SqlSugar实现导航查询功能

    .NET ORM框架SqlSugar实现导航查询功能

    今天这篇文章分享一款好用简单的ORM框架 SqlSugar,相比 EF Core的导航查询更加简单,配置更加容易,几分钟就能上手,对.NET ORM框架SqlSugar实现导航查询功能感兴趣的朋友一起看看吧
    2022-04-04
  • .NetCore基础之读取配置文件详解

    .NetCore基础之读取配置文件详解

    在应用程序开发中,配置文件是主要存储系统的初始配置信息,配置文件的读取虽然属于基础内容却又经常用到。本文将详细为大家介绍.Net Core 如何读取配置文件的,需要的可以参考一下
    2022-03-03
  • 用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]

    用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]

    Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件的 Javascript 组件
    2013-01-01
  • Asp.net自定义控件之单选、多选控件

    Asp.net自定义控件之单选、多选控件

    这篇文章主要为大家详细介绍了Asp.net自定义控件之单选、多选控件的相关资料,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • .NET6自定义WebAPI过滤器

    .NET6自定义WebAPI过滤器

    这篇文章介绍了.NET6自定义WebAPI过滤器的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • ABP框架中的事件总线功能介绍

    ABP框架中的事件总线功能介绍

    这篇文章介绍了ABP框架中的事件总线功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02

最新评论