Перенаправление далеко от HTTPS с ASP.NET Приложение MVC

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

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

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

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

17
задан Amadiere 1 April 2010 в 13:40
поделиться

1 ответ

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

Похожие вопросы: