从基本控制器获取操作过滤器列表

时间:2010-02-23 18:21:31

标签: c# asp.net .net asp.net-mvc

简而言之:有没有人知道从基本控制器获取应用于当前执行操作的actionFilters列表的方法?

长: 我正在使用ASP.NET MVC 1.0框架。我有一个“RequireSSL”actionFilter,我已经重新创建用于检出,但是,如果有人离开结账并返回商店,我想将它们转发回非安全版本的网站。

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

我可以将它包含在global.asax.cs中我想,这里的任何指导都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:3)

您可以创建一个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

答案 1 :(得分:1)

嗯,这就是我结束的......

 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);
    }
}

然后我在我创建的SuperController中添加了一个action属性。

[HandleConnectionSecurity]
公共类SuperController:Controller