mvc3 https & http - PullRequest
       4

mvc3 https & http

11 голосов
/ 25 февраля 2011

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

Любые предложения будут хороши!

Ответы [ 4 ]

14 голосов
/ 25 февраля 2011

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

[RequireHttps]
public ActionResult SignIn() {
   return View();
}
4 голосов
/ 21 сентября 2012

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

[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. Если он находит значение как true, то ему требуется HTTPS.

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

4 голосов
/ 10 марта 2012

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

  1. Если вы внедрили его в базовый контроллер и все ваши контроллеры унаследовали от этого контроллера, вы знаете, что в задней части нет проскальзывания, выполните «Так сказать».

    #if !DEBUG
    #define RELEASE
    #endif namespace ProjectName.UI.Controllers {
        using System.Web.Mvc;
        #if RELEASE
            [RequireHttps]
        #endif
        public abstract partial class ProjectNameBaseController : Controller
        {
        } 
    }
    
2 голосов
/ 21 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...