c# - 即使未使用属性,也会调用自定义授权属性
问题描述
我在使用 ASP.Net MVC 5 时遇到以下问题。即使我没有在代码中的任何位置添加该属性,也会调用 OnAuthorization 方法。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
}
}
我在 Global.asax 下添加了过滤器:
AreaRegistration.RegisterAllAreas();
GlobalFilters.Filters.Add(new CustomAuthorizeAttribute());
不应该只在将属性添加到类或方法时才调用 OnAuthorization 方法吗?
解决方案
不应该只在将属性添加到类或方法时才调用 OnAuthorization 方法吗?
部分是的。但是你需要知道 ASP.Net MVC 有一个全局过滤器的概念。当您不需要重复自己时使用全局过滤器(打破 DRY 原则)。它可以帮助您集中和配置需要为所有控制器执行的过滤器。
这条线
GlobalFilters.Filters.Add(new CustomAuthorizeAttribute());
正在全局添加过滤器,因此即使您没有将过滤器属性应用于控制器类或操作,它也会被调用。
推荐阅读
- python - 我可以在 str.replace(old, new[, count]) 中将字符串列表作为“旧”传递吗?
- python-3.x - 通过 setuptools 部署用户配置
- javascript - 修复 Vue 2 中“vuetify-file-browser”模块的“渲染错误:“TypeError:_vm.$vuetify.breakpoint is undefined”
- r - 删除/选择一些在R中名称末尾带有序列号的对象
- tensorflow - 将权重图输入 keras 中的 CNN(UNET 网络)
- javascript - 使用 JavaScript 如何禁用右键单击或单击滚动条时如何在右键单击窗口中删除检查元素选项
- powershell - 我想用所有 Azure AD 应用程序创建一个输出,它返回 a) 全部列表 b) 过期应用程序列表
- build - Next.js CLI - 在本地运行 dev 时是否可以预先构建某些路由?
- php - PHPMailer 与 Ajax 示例我有错误 Uncaught (in promise) TypeError: error.json is not a function
- css - 在为 React 组件设置动画时获得预期的赋值或函数调用