【问题标题】:Custom Authorization Attribute in .Net Core 5.Net Core 5 中的自定义授权属性
【发布时间】:2021-07-19 09:54:50
【问题描述】:
我有下面的代码用于自定义 Authorize 属性
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
}
问题是没有HttpContextBase 这样的东西。我也有所有的 httpcontext usings,但仍然对我大喊大叫。我做错了什么?
【问题讨论】:
标签:
asp.net-core
.net-core
asp.net-core-5.0
【解决方案1】:
你可以这样写代码:-
您可以使用AuthorizationFilterContext 代替HttpContextBase,如示例中所述。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CustomAuthorizeAttribute : Attribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
//your code logic..........
}
}
【解决方案2】:
如果我们想编写自定义逻辑来授权用户,我建议你可以考虑使用 AuthorizeAttribute 和 IAuthorizationFilter。
IAuthorizationFilter 提供 OnAuthorization 方法,可以编写一些自定义逻辑来授权用户。
更多细节,您可以参考以下代码:
public class CustomAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
//Custom code ...
//Return based on logic
context.Result = new UnauthorizedResult();
}
}
此外,asp.net 核心推荐使用新的策略设计。新方法背后的基本思想是使用新的 [Authorize] 属性来指定“策略”(例如 [Authorize(Policy = "YouNeedToBe18ToDoThis")]。
更多细节,你可以参考这个answer。