没有授权头

3

我正在创建一个ASP.NET Core 2.0 Web API,一切都很顺利,但是我在使用Swashbuckle时遇到了问题。我已经为我的API添加了基本身份验证,并启用了基本方案来使用Swasbuckle:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
        c.AddSecurityDefinition("Basic", new BasicAuthScheme { Description = "Basic authentication" });
    });

    services.AddMvc();
}

当我访问SwaggerUI时,一切都很正常,我可以看到授权方案并且可以添加用户名和密码。但是问题出现在调用任何API时,授权头永远不会发送到API控制器。
我需要做些什么来告诉Swasbuckle它必须发送授权头吗?
1个回答

5

好的,最终我找到了缺失的部分。您需要添加一个文档过滤器,以便让Swashbuckle发送授权:

public class BasicAuthFilter : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {
        var securityRequirements = new Dictionary<string, IEnumerable<string>>()
        {
            { "Basic", new string[] { } }
        };

        swaggerDoc.Security = new[] { securityRequirements };
    }
}

//In the Startup class...
public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
        c.AddSecurityDefinition("Basic", new BasicAuthScheme { Description = "Basic authentication" });
            c.DocumentFilter<BasicAuthFilter>();
    });

    services.AddMvc();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接