加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:忽略基本控制器类中的自定义属性

发布时间:2020-12-16 07:37:31 所属栏目:asp.Net 来源:网络整理
导读:我的项目中有许多控制器,它们都是从一个名为BaseController的控制器继承的.我编写了一个自定义属性,我将其应用于整个BaseController类,因此每次操作都在我的任何控制器中运行时,该属性将首先运行. 问题是我有几个控制器动作,我想忽略该属性,但我不知道该怎么
我的项目中有许多控制器,它们都是从一个名为BaseController的控制器继承的.我编写了一个自定义属性,我将其应用于整个BaseController类,因此每次操作都在我的任何控制器中运行时,该属性将首先运行.

问题是我有几个控制器动作,我想忽略该属性,但我不知道该怎么做.

有人可以帮忙吗?我正在使用MVC 1.

谢谢.

解决方法

我有类似的需求,发现通过创建授权过滤器(实现/派生自FilterAttribute,IAuthorizationFilter)而不是常规操作过滤器(从ActionFilterAttribute派生),并在属性上设置Inherited = true和AllowMultiple = false,它只会在适当的位置运行一次.

这意味着我能够将我的过滤器从基本控制器(站点范围的默认值)“下载”到派生控制器(例如AdminController或其他),或者甚至更进一步到单个操作方法.

例如,

[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,Inherited=true,AllowMultiple=false)]
public class MyCustomAttribute : FilterAttribute,IAuthorizationFilter
{
    private MyCustomMode _Mode;
    public MyCustomAttribute(MyCustomMode mode)
    {
        _Mode = mode;
    }
    public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }
        // run my own logic here.
        // set the filterContext.Result to anything non-null (such as
        // a RedirectResult?) to skip the action method's execution.
        //
        //
    }
}

public enum MyCustomMode
{
    Enforce,Ignore
}

然后使用它,我可以将它应用到我的超级控制器,

[MyCustomAttribute(Ignore)]
public class BaseController : Controller
{
}

我可以为特定控制器更改/覆盖它,甚至可以为特定操作更改/覆盖它!

[MyCustomAttribute(Enforce)]
public class AdministrationController : BaseController
{
    public ActionResult Index()
    {
    }

    [MyCustomAttribute(Ignore)] 
    public ActionResult SomeBasicPageSuchAsAHelpDocument()
    {
    }
}

这允许我针对特定情况“关闭”过滤器,同时仍然能够将其作为默认应用于整个控制器或整个应用程序.

祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读