Подтвердить что ты не робот

Перенаправление с HTTPS с помощью приложения ASP.NET MVC

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

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

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

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

4b9b3361

Ответ 1

После небольшого копания я пошел по линиям прокатки, потому что не было хорошего встроенного решения для этого (как уже упоминалось, для приложений 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);
    }
}

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

[RequireHttp]
public ActionResult Index() {
    return View();
}