Атрибут requireSsl mvc: работа с returlUrl - PullRequest
1 голос
/ 02 декабря 2009

У меня есть [requireSsl] на контроллере учетных записей.

Похоже, что работает для всех действий, кроме действия входа в систему. Я полагаю, что это потому, что действие входа в систему называется следующим:

    new { controller = "Account", returnUrl = HttpContext.Current.Request.RawUrl }


Account/Login?returnUrl...
Account/Login%3freturnUrl...

при переходе на https вторая строка приводит к неверному запросу.

РЕДАКТИРОВАТЬ: ПРОБЛЕМА, ЧТО "?" ХАРАКТЕР ПОЛУЧИЛСЯ С "% 3F". Я пытался также сделать это с помощью URL rewirte в iis7 и то же самое. так в чем причина и как исправить?

ОБНОВЛЕНИЕ: я установил HTTPS для работы с использованием IIS Rewrite, но не MVC, как описано выше. Я удалил enable ssl и сделал это чисто в iis. Я все еще хотел бы знать, почему это не работает в MVC.

1 Ответ

2 голосов
/ 08 декабря 2009

Это не работает из-за того, что вы указали:? символ становится закодированным, когда он не должен. Это ошибка.

Оригинальный код RequireSslAttribute:

UriBuilder builder = new UriBuilder
{
  Scheme = "https",
  Host = filterContext.HttpContext.Request.Url.Host,
  // gets encoded and shouldn't include the ?
  Path = filterContext.HttpContext.Request.RawUrl
};
filterContext.Result = new RedirectResult (builder.ToString ());

, вероятно, следует изменить на что-то вроде

UriBuilder builder = new UriBuilder
{
 Scheme = "https",
 Host = filterContext.HttpContext.Request.Url.Host,
 Path = filterContext.HttpContext.Request.Path,
 Query = filterContext.HttpContext.Request.QueryString.ToString ()
};
filterContext.Result = new RedirectResult (builder.ToString ());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...