Атрибут [RequireHttps] может использоваться в типе контроллера или методе действия, чтобы сказать «к нему можно получить доступ только через SSL». Не-SSL запросы к контроллеру или действию будут перенаправлены на версию SSL (если HTTP GET) или отклонены (если HTTP POST). Вы можете переопределить RequireHttpsAttribute и изменить это поведение, если хотите. Нет встроенного атрибута [RequireHttp], который делает обратное, но вы можете легко создать свой собственный, если хотите.
Существуют также перегрузки Html.ActionLink (), которые принимают параметр протокола; вы можете явно указать "http" или "https" в качестве протокола. Вот документация MSDN об одной такой перегрузке. Если вы не указываете протокол или вызываете перегрузку, у которой нет параметра протокола, предполагается, что вы хотите, чтобы канал имел тот же протокол, что и текущий запрос.
Причина, по которой у нас нет атрибута [RequireHttp] в MVC, заключается в том, что в этом нет особой выгоды. Это не так интересно, как [RequireHttps], и это побуждает пользователей поступать неправильно. Например, многие веб-сайты входят в систему через SSL и перенаправляют обратно на HTTP после того, как вы вошли в систему, , что абсолютно неправильно . Ваш файл cookie для входа в систему так же секретен, как и ваше имя пользователя + пароль, и теперь вы отправляете его в открытом виде по сети. Кроме того, вы уже нашли время, чтобы выполнить квитирование и защитить канал (что является основной причиной того, что HTTPS медленнее, чем HTTP) перед запуском конвейера MVC, поэтому [RequireHttp] не будет выполнять текущий запрос или будущее просит намного быстрее.
Если вы используете utube, измените встраивание на использование HTTPS, а не HTTP
Если вы переходите на HTTP с HTTPS без правильного выхода (см. http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx), ваше имя пользователя + пароль широко открыты. Недостаточно позвонить в SignOut.