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

为API配置Swagger授权遇异常:未授权请求仍返回200而非401

问题原因与解决方案

你当前的代码仅在Swagger中配置了ApiKey的显示规则和接口要求,但没有添加实际的ApiKey验证逻辑,所以未携带ApiKey的请求不会被拦截,自然返回200状态码。

要实现未授权请求返回401,需要完成以下步骤:

1. 创建ApiKey验证过滤器

添加一个自定义授权过滤器,用于校验请求头中的XApiKey是否有效:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

public class ApiKeyAuthorizationFilter : IAuthorizationFilter
{
    private const string ApiKeyHeaderName = "XApiKey";
    private readonly string _validApiKey;

    public ApiKeyAuthorizationFilter(IConfiguration configuration)
    {
        _validApiKey = configuration.GetValue<string>("ApiKey");
        if (string.IsNullOrEmpty(_validApiKey))
        {
            throw new InvalidOperationException("未在配置文件中设置ApiKey");
        }
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // 检查请求头是否包含XApiKey
        if (!context.HttpContext.Request.Headers.TryGetValue(ApiKeyHeaderName, out var extractedApiKey))
        {
            context.Result = new UnauthorizedResult();
            return;
        }

        // 校验ApiKey是否匹配
        if (!string.Equals(extractedApiKey, _validApiKey, StringComparison.OrdinalIgnoreCase))
        {
            context.Result = new UnauthorizedResult();
        }
    }
}

2. 注册并启用过滤器

在Program.cs中修改AddControllersWithViews的配置,全局启用该过滤器(如果只想给特定控制器/方法启用,可在对应控制器上添加[TypeFilter(typeof(ApiKeyAuthorizationFilter))]特性):

builder.Services.AddControllersWithViews(options =>
{
    options.Filters.Add<ApiKeyAuthorizationFilter>();
});

3. 在配置文件中添加ApiKey

在appsettings.json中添加有效的ApiKey配置:

{
  "ApiKey": "你的有效ApiKey值"
}

完成以上配置后,未携带XApiKey或ApiKey无效的请求就会返回401 Unauthorized状态码,同时Swagger UI的ApiKey输入框依然可以正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:23