RegisterGlobalFilters中没有HttpContext.Current.Request

时间:2015-12-10 09:28:08

标签: asp.net-mvc-4

我正在尝试将RequireHttpsAttribute属性添加到MVC filters collection,以便在prod服务器上部署网站时将其推送到HTTPS。问题出在HttpContext.Current.Request.IsLocal行,Request对象尚不可用。那么如何检查网站是localy还是prod上的RegisterGlobalFilters服务器?

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {    
        if (!HttpContext.Current.Request.IsLocal) //Exception here!!!
        {
            filters.Add(new RequireHttpsAttribute());
        }
    }

1 个答案:

答案 0 :(得分:0)

在此方法中,您将注册将在请求进入时执行检查的过滤器。此方法仅在每次启动应用程序时调用一次。所以在这里你需要做一些事情:

filters.Add(new MyAuthorizeAttribute());

MyAuthorizeAttribute类似于:

 public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        If(!httpContext.Request.IsLocal)
        {
            **//Check for HTTPS and return false if need be**
        }
}

当然,它不需要是AuthorizeAttribute。

修改

正如我之前所说,此方法仅在应用程序启动时调用一次,因此没有请求您在此处签入。在这里,您只能应用每次收到请求时都会调用的过滤器。在这些过滤器中,您可以检查请求特定的属性。

如果您坚持使用RequireHttpsAttribute,则必须将其应用于所有方法,无论请求是否为本地请求,或者您必须扩展RequireHttpsAttribute并覆盖HandleNonHttpsRequest以处理本地请求。