如何更改 Web Api Core 未经授权的行为
Posted
技术标签:
【中文标题】如何更改 Web Api Core 未经授权的行为【英文标题】:How to change Web Api Core unauthorized behavior 【发布时间】:2017-06-15 22:44:09 【问题描述】:未授权请求的默认ASP.NET Web Api Core
行为是发送带有空内容的401/403 error
。我想通过指定某种指定错误的 Json 响应来更改它。
但我很难找到一个合适的地方来引入这些变化。官方文档没有帮助(全部阅读)。我猜想我可能会在我的异常过滤器/中间件中捕获UnathorizedException
,但它没有成功(我猜它是在授权级别处理的,甚至根本没有抛出)。
所以我的问题是如何在未经授权的请求的情况下自定义响应行为。
【问题讨论】:
查看app.UseStatusCodePagesWithRedirects
和app.UseStatusCodePages
等扩展方法
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie
转到此...它可能会有所帮助
@Developer,它似乎是特定于 MVC,而不是 Web Api
asp.net-core有这样的区别吗?你的认证机制是什么?
@Developer,我使用令牌身份验证。顺便说一下,这里的代码:github.com/alexidsa/absenceapi
【参考方案1】:
使用 .Net Core 3(或者更早的版本),您可以编写一个中间件来检查 context.Response 的状态是否为 40x,然后返回一个自定义对象。以下是我的大致做法:
if (context.Response.StatusCode == (int)HttpStatusCode.Unauthorized)
var result = new MyStandardApiResponseDto
Error = new MyErrorDto
Title = "Unauthorized",
Messages = new List<string> "You are not authorized to access the resource. Please login again." ,
,
Result = null
;
await context.Response.WriteAsync(JsonConvert.SerializeObject(result));
【讨论】:
以上是关于如何更改 Web Api Core 未经授权的行为的主要内容,如果未能解决你的问题,请参考以下文章
Core 2.0 上的 IdentityServer4 从 API 获取 401(未经授权)
.NET Core - 在 IIS 上使用 Windows 身份验证从 MVC 应用程序调用 Web API 导致 HttpRequestException 401(未经授权)状态代码
将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误
Angular MSAL AD 401 在 Angular 应用程序中未经授权,但在 Postman 中 200 正常 - ASP.NET Core Web API