Перенаправление с HTTPS с помощью приложения ASP.NET MVC - PullRequest
17 голосов
/ 01 апреля 2010

Я использую ASP.NET MVC 2 и имею страницу входа, защищенную через HTTPS. Чтобы пользователь всегда получал доступ к этим страницам через SSL, я добавил атрибут [RequireHttps] в контроллер. Это делает работу отлично.

Когда они успешно вошли в систему, я бы хотел перенаправить их обратно в версию HTTP. Однако атрибута [RequireHttp] нет, и я изо всех сил пытаюсь понять, как мне этого достичь.

Дополнительное (потенциальное) осложнение заключается в том, что веб-сайт, находящийся в работе, размещается по маршруту домена, но для целей разработки и тестирования он находится в подкаталоге / виртуальном каталоге / приложении.

Я слишком обдумываю это, и есть ли простое решение, бросающее мне в глаза? Или это немного сложнее?

1 Ответ

26 голосов
/ 01 апреля 2010

После небольшого копания я продолжил свой собственный путь, поскольку не было хорошего встроенного решения для этого (как уже упоминалось, есть отличное решение для приложений MVC2 в форме [RequireHttps] ). Вдохновленный решением çağdaş для решения этой проблемы , я адаптировался, чтобы придумать следующий код:

public class RequireHttp : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // If the request has arrived via HTTPS...
        if (filterContext.HttpContext.Request.IsSecureConnection)
        {
            filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("https:", "http:")); // Go on, bugger off "s"!
            filterContext.Result.ExecuteResult(filterContext);
        }
        base.OnActionExecuting(filterContext);
    }
}

Теперь я могу добавить это к моим методам Контроллера, и они ведут себя (на первый взгляд), как и ожидалось. Если я перенаправлю на действие Index на моем контроллере по протоколу HTTPS, он будет перенаправлен на HTTP. Он разрешает только HTTP-доступ к Index ActionResult.

[RequireHttp]
public ActionResult Index() {
    return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...