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

如何将Lambda Authorizer上下文值传递至.NET 6 Minimal API自定义请求头

解决方案:将Lambda Authorizer的Context传递给.NET 6 Minimal API(代理集成场景)

一、先搞懂数据怎么传的

在API Gateway的Lambda代理集成模式下,Lambda Authorizer返回的context不会自动变成HTTP请求头,而是被打包在API Gateway发给Lambda的请求事件里,具体位置是APIGatewayProxyRequest.RequestContext.Authorizer字段。

二、两种实现方式

1. 直接在接口里读取(快速实现)

如果只是个别接口需要用这些context值,直接在接口方法里获取即可:

首先确保你的Lambda函数用的是代理集成的标准请求/响应对象:

using Amazon.Lambda.APIGatewayEvents;
using Amazon.Lambda.Core;

// 指定Lambda序列化器,避免数据解析问题
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/your-endpoint", (APIGatewayProxyRequest request) =>
{
    // 从Authorizer上下文里拿数据
    var authorizerData = request.RequestContext.Authorizer;
    var companyId = authorizerData["company_id"]?.ToString();
    var owner = authorizerData["Owner"]?.ToString();

    // 后续业务逻辑用这些值就行
    return Results.Ok(new { CompanyId = companyId, RequestedBy = owner });
});

app.Run();

2. 全局转为请求头(多接口场景推荐)

如果多个接口都需要用这些值,建议加个中间件把context数据转成请求头,这样所有接口都能通过HttpContext直接读取:

using Amazon.Lambda.APIGatewayEvents;
using Amazon.Lambda.Core;

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 自定义中间件:把Authorizer的context转成请求头
app.Use(async (context, next) =>
{
    // 从服务容器中取出Lambda的请求对象
    if (context.RequestServices.GetService(typeof(APIGatewayProxyRequest)) is APIGatewayProxyRequest lambdaRequest)
    {
        var authorizerContext = lambdaRequest.RequestContext.Authorizer;
        if (authorizerContext != null)
        {
            // 给请求头加个前缀(比如X-Authorizer-),避免和其他头冲突
            foreach (var kvp in authorizerContext)
            {
                context.Request.Headers.Append($"X-Authorizer-{kvp.Key}", kvp.Value?.ToString() ?? string.Empty);
            }
        }
    }
    await next();
});

// 接口里直接通过请求头获取
app.MapGet("/your-endpoint", (HttpContext context) =>
{
    var companyId = context.Request.Headers["X-Authorizer-company_id"].ToString();
    var owner = context.Request.Headers["X-Authorizer-Owner"].ToString();

    return Results.Ok(new { CompanyId = companyId, RequestedBy = owner });
});

app.Run();

三、必查的配置要点

  • 确认API Gateway的目标方法已经关联了你的Lambda Authorizer,并且在集成设置里选了Lambda代理集成(控制台里方法的“集成请求”页面能验证)。
  • Lambda Authorizer返回的context键名尽量用小写字母加下划线,避免特殊字符,减少解析问题。
  • 一定要用示例里的DefaultLambdaJsonSerializer序列化器,不然可能出现Authorizer字段读不到的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:31:09