c# - AuthorizeAttribute 在 ASP.net Core 中返回自定义值(无覆盖)
问题描述
我正在使用 ASP.NET Core 5.0 并制作 REST API。我还使用 JWT 令牌进行身份验证。
[Authorize]
public class LoginController : Controller
我已经为 JWT 添加了授权/身份验证中间件。如果身份验证失败,如何让 AuthorizeAttribute 返回自定义值?目前,它这样做:
Authorize Good token: nothing
Authorize Bad token: Return status 401/403
但我希望它做这样的事情,它返回 200 OK 但正文中有 JSON 响应,因为需要与我的其他响应保持一致并且对浏览器友好
Authorize Good token: nothing
Authorize Bad token: 200 OK <json>
这是我将用于我的 JSON 的模板
{
succeeded: boolean
statusCode: number //http status code
response: array of strings //general info such as errors
}
注意:我已经创建了自定义身份验证策略。我只需要它返回一个我不知道该怎么做的唯一值。
解决方案
好吧,这不是很漂亮(就其位置而言),但应该可以正常工作:
.AddJwtBearer(options =>
{
// ...
options.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = ctx =>
ctx.Response.WriteAsJsonAsync(new
{
suceeded = false,
statusCode = yourStatusCode,
response = yourStringArray
})
};
// ...
}
可能你已经掌握了它的要点。您可以为各种 JWT 令牌身份验证事件设置处理程序。WriteAsJsonAsync()
自动设置 200 状态码和 applicaton/json 内容类型。但是您也可以使用 编写一个字符串WriteAsync()
,并设置自定义状态代码和内容类型。
推荐阅读
- python - 在 selenium python 上检索 2FA 表单 paypal
- windows-10-desktop - 桌面上的随机黑框
- javascript - 如何实现一个Transform流,它在不同的对象模式下作为可读和可写?
- javascript - 反应:语法错误:不能在模块外使用导入语句
- amazon-web-services - 从 dynamodb 流中读取
- bing-maps - 信息框通过地理编码图钉,在打开新信息框之前关闭所有打开的信息框
- python - 如果字典的键值有另一个相同的键值,你如何组合字典的键值,同时省略未组合的字典?
- android - 如何在jetpack compose中突出显示文本的特定单词?
- javascript - 如何使用 JavaScript 将 HTML 图像移动到单击位置
- java - 在 application.properties 中使用环境变量时构建 Java 应用程序