我正在尝试将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());
}
}
答案 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以处理本地请求。