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

C# Web API添加API Key认证无效问题排查求助

问题排查与解决方案

1. 控制器基类错误

你的控制器继承了ApiController,但ASP.NET Core Web API的标准控制器基类是ControllerBase。如果ApiController是自定义类,未正确继承ControllerBase会导致Action过滤器特性无法被框架识别。

修改控制器代码:

[ApiController]
[APIKeyAuth]
public class MyStudentController : ControllerBase
{
    // 你的控制器逻辑
}

2. API Key比较逻辑错误

Request.Headers.TryGetValue返回的potentialAPIKey是StringValues类型(支持多值表头),直接与string类型的apiKey用Equals比较会因对象类型不匹配导致逻辑错误。需要提取表头的第一个值再做比较:

修改APIKeyAuthAttribute中的比较逻辑:

if (!apiKey.Equals(potentialAPIKey.FirstOrDefault(), StringComparison.OrdinalIgnoreCase))
{
    context.Result = new ContentResult
    {
        StatusCode = 401,
        Content = "Unauthorized Client."
    };
    return;
}

3. 确认控制器服务已注册

在Program.cs中确保已添加控制器服务并映射端点,否则控制器及附加的过滤器不会被框架加载:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务
builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();

// 映射控制器端点
app.MapControllers();

app.Run();

4. 验证配置读取是否正确

可以在过滤器中添加日志,确认从appsettings.json中读取的MyApiKey是否正确:

var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<APIKeyAuthAttribute>>();
logger.LogInformation("Configured API Key: {ApiKey}", apiKey);

启动API后查看日志,确保读取到的Key与配置文件中的值一致。

5. 检查Postman请求配置

  • 确认请求表头的键是MyApiKey(代码中是精确匹配,建议与配置保持大小写一致)
  • 关闭Postman中其他自动认证方式(如Bearer Token),避免请求被意外放行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26