C# 从基本控制器获取操作筛选器列表

C# 从基本控制器获取操作筛选器列表,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,简而言之:是否有人知道如何从基本控制器获取应用于当前执行操作的actionFilters列表 长: 我正在使用ASP.NETMVC1.0框架。我有一个“RequireSSL”操作过滤器,我已经为签出重新创建,但是,如果有人离开签出并返回商店,我想将他们转发回该站点的非安全版本 在基本控制器中(我使用的是从默认控制器继承的自定义基本控制器),找出哪些actionFilters应用于当前操作是很有帮助的 我想,我可以将此纳入global.asax.cs,这里的任何指导都将不胜感激 谢谢您可以创建Ac

简而言之:是否有人知道如何从基本控制器获取应用于当前执行操作的actionFilters列表

长: 我正在使用ASP.NETMVC1.0框架。我有一个“RequireSSL”操作过滤器,我已经为签出重新创建,但是,如果有人离开签出并返回商店,我想将他们转发回该站点的非安全版本

在基本控制器中(我使用的是从默认控制器继承的自定义基本控制器),找出哪些actionFilters应用于当前操作是很有帮助的

我想,我可以将此纳入global.asax.cs,这里的任何指导都将不胜感激


谢谢

您可以创建ActionFilter并实现OnActionExecuting。从该属性可以重定向它们

public sealed class MyRedirectAttributeAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (!filterContext.ActionDescriptor.IsDefined(typeof(RequireSSLAttribute), true))
        {
            filterContext.HttpContext.Response.Redirect("~/Controller/Action");
        }

        base.OnActionExecuting(filterContext);
    }
}true

好吧,这是我最后得到的

 public sealed class HandleConnectionSecurityAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase req = filterContext.HttpContext.Request;
        HttpResponseBase res = filterContext.HttpContext.Response;

        if (!filterContext.ActionDescriptor.IsDefined(typeof(RequiresSSL), true) && HttpContext.Current.Request.IsSecureConnection)
        {
            var builder = new UriBuilder(req.Url)
            {
                Scheme = Uri.UriSchemeHttp,
                Port = 80
            };
            res.Redirect(builder.Uri.ToString());
        }

        base.OnActionExecuting(filterContext);
    }
}
然后,我向我创建的超级控制器添加了一个action属性

[HandleConnectionSecurity]

公共类超级控制器:控制器

我不是必须将此过滤器添加到每个操作吗?在当前的设置中,我有一个名为“RequireSSL”的actionFilter,如果该操作具有此筛选器,它可以很好地将浏览器转发到SSL,但对于所有非SSL操作,我不想要求应用另一个筛选器。。从本质上讲,使每个操作都需要非ssl或ssl必需的筛选器是一种不好的做法,我认为..这是放在BaseController上的,而不是每个操作。它可以测试运行操作。我们也做过类似的事情。RedirectAttribute根据在操作中找到的属性进行分支。操作上的属性不是ActionFilter。我确实在我的基本控制器中的initialize方法中添加了此属性,但它似乎没有运行。。我觉得很奇怪。。是否还有其他位置需要放置?将其添加到BaseController类上,而不是方法。回答得很好。正是我想要的。谢谢