在 Swagger 中为未经授权的请求指定空 Content-Type

问题描述 投票:0回答:1

为了生成完整的 swagger.json 文件,我为最小的 .NET API 方法指定了所有可能的返回状态,如下所示:

app.MapGet(rootPattern, async (MyDbContext db) =>
{
    return await db.Something.Where(x => x.SomeCondition).ToListAsync();
})
    .Produces(200)
    .Produces(401)
    .RequireAuthorization();

但是,现在会将 401 结果指定为内容类型为

application/json
,而实际上,当请求未经授权时,.NET 不会设置 Content-Type(并且不返回任何内容)。 (副作用是我们的测试套件(ApiDog)始终将请求标记为Failed,因为 Content-Type 与预期值不匹配)。

我可以这样做

.Produces(401, typeof(string), "text/plain")
,这更好一些并且满足ApiDog,但仍然不太正确。

所以我的问题是:我可以指定不带 Content-Type 的 401 响应吗?或者,我可以以某种方式配置我的应用程序,以便 401 具有某种 json 响应(例如

{ "status":"401" }

asp.net-core swagger swashbuckle minimal-apis
1个回答
0
投票

或者,我可以以某种方式配置我的应用程序,以便 401 某种 json 响应(例如 { "status":"401" })

您可以添加如下中间件:

app.Use(async (context, next) =>
    {
        await next.Invoke();
        if (context.Response.StatusCode == 401)
        {
            await context.Response.WriteAsJsonAsync(new Response() { statuscode=401});
        }
    });
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    ....
    app.Map(....)
© www.soinside.com 2019 - 2024. All rights reserved.