2016-03-07 2 views
-1

в моей старой версии ASP.NET MVC 5 У меня есть настраиваемый фильтр, который управляет соединениями HTTP. Мой фильтр заставляет обеспеченных (HTTPS) запрос на повторную отправку через HTTPТребовать HTTP (не HTTP) в ASP.NET 5 (Core) Middleware

Это мой фильтр:

/// <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

Смежные вопросы