2016-03-07 138 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