首页 > 解决方案 > 在 dotnet core 3.0 中使用 [Authorize]-attribute 时修改响应内容

问题描述

我们使用[Microsoft.AspNetCore.Authorization.Authorize]-attribute 来授权对我们 api 的请求。如果 JWT 在 HTTP-Header 中不存在或无效,则返回 401 错误。我们希望修改响应正文以包含更多信息,而不是空正文。我们尝试做以下事情:

 app.Use(async (context, next) =>
 {
     var statusCode = context.Response.StatusCode;
     //write a custom body here       
 });

但是状态码在我看来总是HTTP.200有点奇怪,因为 Postman 告诉我它是HTTP.401

如果在我们的 api 中抛出异常,我们已经实现了一个过滤器,该过滤器实现IActionFilter了返回更详细的错误消息。这就是我们在HTTP.401. 有没有我可以添加的过滤器来实现这一点?

标签: c#asp.net-core-3.0

解决方案


所以你需要在 JWT 之前添加你自己的中间件,调用下一个处理程序,检查结果并添加你的自定义响应。

    app.Use(async (context, next) =>
        {
            await next.Invoke();
            var statusCode = context.Response.StatusCode;
        });
    app.UseAuthentication();

推荐阅读