Я использую ActionFilter (см. Ниже), чтобы определить, требуется ли 1. текущий контроллер/действие требует SSL и 2. В настоящее время используется SSL и соответственно перенаправляется.Цикл переадресации с фильтром действий SSL в ASP.NET MVC
Это работает нормально локально (используя фиктивный сертификат в IIS 7), но как только я получаю его на сервере, я получаю сообщение об ошибке, указывающее на бесконечный цикл перенаправления.
Любые идеи?
public class SslFilter : ActionFilterAttribute
{
public SslFilter(bool sslRequired)
{
SslRequired = sslRequired;
}
public bool SslRequired { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase req = filterContext.HttpContext.Request;
HttpResponseBase res = filterContext.HttpContext.Response;
var builder = new UriBuilder(req.Url);
if (SslRequired && !req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttps;
builder.Port = 443;
res.Redirect(builder.Uri.ToString());
}
else if (!SslRequired && req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttp;
builder.Port = 80;
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
Firefox ошибка:
The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
This problem can sometimes be caused by disabling or refusing to accept cookies.
Мы пробовали этот подход и оригинальный подход Alex H - в обоих случаях они работали в наших средах разработчиков, но не в производстве. Однако принятый подход в этом вопросе действительно работал - http://stackoverflow.com/questions/2302081/how-do-i-set-the-protocoll-when-using-redirecttoaction –