2016-03-07 141 views
-1

中的HTTP(而不是HTTP)我有一个自定义过滤器来管理HTTP连接。我的过滤器强制通过HTTP在我的老版本的ASP.NET MVC 5中需要ASP.NET 5(核心)中间件

被重新发送一个安全(HTTPS)请求,这是我的过滤器:

/// <summary> 
    /// Forces a secured (HTTPS) request to be resent over HTTP 
    /// </summary> 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
    public class RequireHttpAttribute : FilterAttribute, IAuthorizationFilter 
    { 
     public virtual void OnAuthorization(AuthorizationContext filterContext) 
     { 
      if (filterContext == null) 
      { 
       throw new ArgumentNullException("filterContext"); 
      } 

      if (filterContext.HttpContext.Request.IsLocal) 
      { 
       return; 
      } 

      if (string.Equals(filterContext.HttpContext.Request.Headers["X-Forwarded-Proto"], 
       "https", 
       StringComparison.InvariantCultureIgnoreCase)) 
      { 
       HandleHttpsRequest(filterContext); 
      } 

      return; 

     } 

     protected virtual void HandleHttpsRequest(AuthorizationContext filterContext) 
     { 
      if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       // Only redirect GET requests 
       return; 
      } 

      string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; 
      filterContext.Result = new RedirectResult(url); 
     } 
    } 

我怎样才能做到这在ASP.NET 5?

谢谢。

回答

3

拿内置的代码RequireHttpsAttribute,好吧,让它做相反的事。

解析X-Forwarded-For- *是另一个middleware的一部分,所以不要自己动手,我只是先配置它。

+0

谢谢@blowdart我会像你说的那样做;)我不知道为什么人们投票下来的问题... ... – chemitaxis