Mvc3 https & http

Я конвертирую приложение asp.net в mvc3. Допустим, у меня есть страница с подписью, для которой требуется https, и для каждой другой страницы требуется только http, как я могу перенаправить signin на https и сохранить все остальные страницы на http?

Любые предложения были бы замечательными!

Ответ 1

Класс RequireHttpsAttribute может быть тем, что вы хотите.

[RequireHttps]
public ActionResult SignIn() {
   return View();
}

Ответ 2

Мне нравится это решение, потому что: 1. Потому что вам никогда не придется прикоснуться к нему снова в VS. Декоратор сам по себе заставляет браузер отображать сайт в https даже при отладке.

  • Если вы реализуете его в базовом контроллере и наследуете все свои контроллеры от этого контроллера, вы знаете, что нет проскальзывания в спину, "так сказать".

    #if !DEBUG
    #define RELEASE
    #endif namespace ProjectName.UI.Controllers {
        using System.Web.Mvc;
        #if RELEASE
            [RequireHttps]
        #endif
        public abstract partial class ProjectNameBaseController : Controller
        {
        } 
    }
    

Ответ 3

Мой коллега, и я посмотрел на это и считаю, что мы нашли хорошее решение. Вот что мы придумали:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class HttpsRequiredAttribute : RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        // Check to see if we're secure
        string requirestr = ConfigurationManager.AppSettings["RequireHttps"];
        bool require;
        if (bool.TryParse(requirestr, out require) && require)
            base.HandleNonHttpsRequest(filterContext);
    }       

}

Это работает путем расширения RequireHttpsAttribute и может применяться к классу или методу, как указано в AttributeTargets. Затем мы переопределили виртуальную функцию в RequireHttpsAttribute. То, что делает этот метод, - это проверить файл Web.config для ключа с именем "RequireHttps". Если он не может найти его, или это недопустимое значение bool (что проверяет bool.tryparse), тогда он не требует Https. Если он считает значение истинным, то для него требуется HTTPS.

Если вы используете это расширение, вам нужно добавить ключ в свой Web.config, называемый "RequireHttps", следующим образом: <add key="RequireHttps" value="true"/> Затем вы можете отключить требование для Https, изменив эту переменную для отладки или изменив файл Web.config, чтобы иметь требование везде, где развертывается ваш сайт.

Ответ 4

проблема в том, что после входа в систему все ваши запросы будут https, даже если вы этого не хотите.