【问题标题】: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 中的AuthorizeAttribute 没有AuthorizeCore 方法可以覆盖,HttpContextBase 不存在。这些来自 ASP.Net(不是核心)。这个问题可能会有所帮助:stackoverflow.com/questions/31464359/…

标签: 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

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2017-11-16
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多