MVC3 после [RequireHttps] как убедиться, что используется не https - PullRequest
6 голосов
/ 24 января 2012

Я нашел Это сообщение и похоже, что мне было нужно для приложения, мой вопрос: как вы можете вернуться к обычному http, когда https больше не нужен? Будет ли он по своей сути делать это на основе действия, не имеющего аннотации [RequireHttps]?

РЕДАКТИРОВАТЬ: я нашел пару сообщений, говорящих о переходе с https на http ( здесь & здесь ). Тем не менее, я все равно буду благодарен за ответ на вопрос ниже.

С другой стороны, я обсуждал вопрос о том, чтобы открыть приложение в новом окне. Это справедливое предположение, что https будет применяться только к новому окну?

Ответы [ 2 ]

7 голосов
/ 24 января 2012

ASP.NET MVC RequireHttps работает только в одном направлении.В прошлом я только что создал свою собственную реализацию FilterAttribute, чтобы разрешить перемещение в обоих направлениях:

EnsureHttpsAttribute

  public class EnsureHttpsAttribute : FilterAttribute, IAuthorizationFilter
  {
    public void OnAuthorization(AuthorizationContext filterContext)
    {
      Verify.NotNull(filterContext, "filterContext");
      Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");

      var request = filterContext.HttpContext.Request;
      if (request.Url != null && !request.IsSecureConnection && !request.IsLocal)
        filterContext.Result = new RedirectResult("https://" + request.Url.Host + request.RawUrl);
    }
  }

EnsureHttpAttribute

  public class EnsureHttpAttribute : FilterAttribute, IAuthorizationFilter
  {
    public void OnAuthorization(AuthorizationContext filterContext)
    {
      Verify.NotNull(filterContext, "filterContext");
      Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");

      var request = filterContext.HttpContext.Request;
      if (request.Url != null && request.IsSecureConnection)
        filterContext.Result = new RedirectResult("http://" + request.Url.Host + request.RawUrl);
    }
  }

Практически такая же реализация, как RequireHttpsAttribute, если память служит;хотя вышеприведенная реализация проверяет, является ли это Local запросом, и игнорирует переключение на HTTPS.

2 голосов
/ 24 января 2012

Предлагаю вам прочитать этот пост:

http://www.codehosting.net/blog/BlogEngine/post/More-fiddling-with-MVC3-and-https.aspx

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