2010-05-26 4 views
0

Я вижу петлю перенаправлять от наших производственных серверов, когда мы включаем следующий атрибут класса контроллера:ASP.NET MVC Действие фильтра Перенаправление Loop

public class TestRedirectHttpsAttribute : RedirectHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (Convert.ToBoolean(ConfigurationManager.AppSettings["TestSecureEnabled"] ?? bool.FalseString)) 
     { 
      base.OnAuthorization(filterContext); 
     } 
    } 
} 


public class RedirectHttpsAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public virtual void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (!filterContext.HttpContext.Request.IsSecureConnection) 
     { 
      UriBuilder uriBuilder = new UriBuilder(filterContext.HttpContext.Request.Url); 
      uriBuilder.Scheme = "https"; 
      uriBuilder.Port = -1; // Don't inject port 
      filterContext.Result = new RedirectResult(uriBuilder.ToString()); 
     } 
    } 
} 

Я знаю, что это похоже на вопрос - Redirect loop with SSL action filter in ASP.NET MVC но его спросили в феврале, и я надеялся, что у кого-то может быть лучшее решение. Решение вопроса в ссылке состояло в том, чтобы перенаправить действие на контроллер, но если мы хотим перенаправить все действия на HTTPS, нам нужно будет убедиться, что он вызывался в каждом, а не применял настраиваемый атрибут FilterAttribute к контроллеру.

Примечание. Этот код работает из нашей среды разработки, используя фиктивные сертификаты SSL.

Возможно, у меня есть неправильный конец палки, и я должен делать что-то совсем другое, если да, примите мои извинения.

ответ

1

Для тех, у кого может быть такая же проблема. Это было результатом того, что наш балансировщик нагрузки обрабатывал запросы SSL и передавал наши веб-серверы с использованием порта 80; это привело к тому, что не удалось определить, что безопасный запрос действительно безопасен.

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