You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core Web API中实现类Angular HttpInterceptor的JWT拦截器?

在ASP.NET Core Web API中实现自动添加JWT Token的请求拦截器

完全可以实现,ASP.NET Core提供的DelegatingHandler机制和Angular的HttpInterceptor作用逻辑一致,能拦截所有通过HttpClient发起的请求,自动为请求头添加JWT Token,非常适配微服务间的调用场景。

具体实现步骤

1. 创建自定义请求拦截Handler

创建继承自DelegatingHandler的类,重写SendAsync方法,在请求发送前注入JWT Token:

public class JwtTokenHandler : DelegatingHandler
{
    private readonly IConfiguration _configuration;

    // 示例从配置文件读取Token,实际可根据场景从Token服务、缓存等动态获取
    public JwtTokenHandler(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var jwtToken = _configuration["ServiceAuth:JwtToken"];

        if (!string.IsNullOrWhiteSpace(jwtToken))
        {
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", jwtToken);
        }

        return await base.SendAsync(request, cancellationToken);
    }
}

2. 将Handler注册到依赖注入容器

在Program.cs中完成Handler的注册,并配置HttpClient绑定该拦截逻辑:

var builder = WebApplication.CreateBuilder(args);

// 注册自定义JWT拦截Handler为单例
builder.Services.AddSingleton<JwtTokenHandler>();

// 配置专属HttpClient,绑定拦截Handler
builder.Services.AddHttpClient("MicroServiceClient")
    .AddHttpMessageHandler<JwtTokenHandler>();

// 其他服务与中间件配置...

var app = builder.Build();

app.Run();

3. 使用配置好的HttpClient发起微服务调用

在业务类中注入IHttpClientFactory,获取配置好的HttpClient即可自动携带Token:

public class OrderServiceClient
{
    private readonly HttpClient _httpClient;

    public OrderServiceClient(IHttpClientFactory httpClientFactory)
    {
        _httpClient = httpClientFactory.CreateClient("MicroServiceClient");
    }

    public async Task<OrderDto> GetOrderAsync(int orderId)
    {
        // 请求会自动携带Authorization头,无需手动设置
        var response = await _httpClient.GetAsync($"https://order-service/api/orders/{orderId}");
        response.EnsureSuccessStatusCode();
        return await response.Content.ReadFromJsonAsync<OrderDto>();
    }
}

扩展说明

  • 若需动态刷新Token,可在JwtTokenHandler中集成Token获取与缓存逻辑,比如调用身份服务的刷新接口更新Token。
  • 可添加过滤逻辑,仅对特定域名、路径的请求添加Token,避免无意义的处理。
  • 若是转发前端请求的用户Token,可从HttpContext中提取当前用户的Token并注入到请求头。

内容的提问来源于stack exchange,提问作者Abir Mahmud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:45:14