为了生成完整的 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" }
)
或者,我可以以某种方式配置我的应用程序,以便 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(....)