覆盖全局操作筛选器

Jon*_*han 5 c# ssl asp.net-mvc-3

我网站上的一些页面需要使用SSL,所以我已添加[RequireHttps]到相关的控制器中.但是,我仍然希望我的大多数页面始终使用非SSL,因此我成功使用了在SO找到的代码来创建自定义[DoNotUseHttps]过滤器.

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

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

Kir*_*oll 5

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

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

    bool requireHttps = filterContext.ActionDescriptor.ControllerDescriptor
        .GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0
 }
Run Code Online (Sandbox Code Playgroud)