c# - 如何覆盖(不组合)每个方法的授权属性
问题描述
我有一个自定义AuthorizeAttribute
(假设它称为MyAuthorizeAttribute1),我想将其应用于我的 WebAPI2 应用程序中的几乎所有方法,因此我已将其添加到我的WebApiConfig.cs
文件中:
config.Filters.Add(new MyAuthorizeAttribute1());
对于我希望允许匿名访问的少数端点,我将使用[AllowAnonymous]
.
但是,我想将不同的、限制性稍小的自定义AuthorizeAttribute
( MyAuthorizeAttribute2 ) 应用于单个方法,但我不知道如何解决。
如果我这样做:
[MyAuthorizeAttribute2]
public HttpActionResult GetList()
{
....
}
然后MyAuthorizeAttribute1和MyAuthorizeAttribute2中的断点都会被命中,这是预期的,因为授权属性是相加的(当多个属性应用于方法时,它们会组合在一起)。
我想我可能能够AuthorizeAttribute
在控制器级别覆盖 main ,然后在方法级别应用限制较少的一个,如下所示:
[AllowAnonymous]
public class StudentsController : ApiController
{
[MyAuthorizeAttribute2]
public HttpActionResult GetList()
{
....
}
}
但这似乎告诉该GetList()
方法允许匿名访问(我猜它是将AllowAnonymous
属性与结合起来MyAuthorizeAttribute2
,其组合效果是允许匿名访问)。
WebApiConfig.cs
我意识到我可以通过从每个控制器的顶部删除行并应用MyAuthorizeAttribute1来实现我想要做的事情,除了我想使用MyAuthorizeAttribute2的那个,然后用适当的装饰该控制器中的每个方法授权属性。
但是,如果可能的话,我宁愿保留授权过滤器,WebApiConfig.cs
因为这样我自己或其他开发人员将来意外创建一个过度访问的端点的危险很小。
AuthroizeAttribute
那么,是否有可能用一个覆盖一个集合而不是与它结合的方法来装饰一个方法?WebApiConfig.cs
(以防万一它与任何人的答案相关,MyAuthorizeAttribute1实际上是从MyAuthorizeAttribute2派生的,派生类添加了额外的授权级别)。
解决方案
推荐阅读
- bash - 提交随机文件名的 SGE 作业数组
- react-native - React Native,在应用退出前存储信息
- c# - 为什么在c#中从.dll调用时表单不出现
- python - 转换 .ul 文件
- visual-c++ - 如何在 Microsoft VIsual C 编译器中声明符号驻留在特定地址?
- javascript - 在 subscribe 里面调用 subscribe 好不好?
- c# - XML 填充数据表
- android - Android Kotlin 测试:需要但未调用,实际上,与此模拟的交互为零
- python - 使用分类数据创建维恩图 - matplotlib_venn
- text - 文本文件以 ANSI 而不是 UTF-8 Bom 下载