Я вижу петлю перенаправлять от наших производственных серверов, когда мы включаем следующий атрибут класса контроллера: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.
Возможно, у меня есть неправильный конец палки, и я должен делать что-то совсем другое, если да, примите мои извинения.