覆盖全局操作筛选器

时间:2011-07-04 19:36:38

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

我网站上的一些页面需要使用SSL,因此我已将[RequireHttps]添加到相关控制器中。但是,我仍然希望我的大多数网页始终使用非SSL,因此我成功使用code I found on SO创建了自定义[DoNotUseHttps]过滤器。

为了简化操作,我希望默认包含此非SSL过滤器,因此我将其添加到Global.asax文件中设置的全局过滤器中。但是,我现在似乎已经创建了一个无限循环,每个过滤器重定向到另一个。

这引出了我的问题...我可以添加到全局过滤器以检测[RequireHttps]是否已应用于控制器吗?

1 个答案:

答案 0 :(得分:5)

当然,您可以询问有关动作和控制器的任何内容。检查RequireHttpsAttribute

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    base.OnActionExecuted(filterContext);

    bool requireHttps = filterContext.ActionDescriptor.ControllerDescriptor
        .GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0
 }