Я могу получить доступ к переменной строки запроса по запросу GET, но не POST - PullRequest
2 голосов
/ 02 февраля 2010

Если я пытаюсь зайти на веб-страницу с фильтром, который проверяет аутентификацию, он перенаправляется на страницу входа, когда я занимаюсь серфингом анонимно.Таким образом, URL-адрес может выглядеть следующим образом:

www.example.com/user/login?ReturnUrl=/user/settings

В действии Мой вход в систему есть 2 метода, когда для GET, и один для типов запросов POST.

[AcceptVerbs("GET")
public ActionResult Login()
{
}
[AcceptVerbs("POST")
public ActionResult Login(FormCollection f)
{
}

Следующий код находится в обоих GETи действие входа в систему POST:

 string redirectUrl = "";

 if(Request.QueryString["ReturnUrl"] != null)
 {
  redirectUrl = Request.QueryString["ReturnUrl"];
 }

В режиме отладки переменная правильно инициализируется в действии GET, но в действии POST она просто пропускает вызов, что означает, что оно равно NULL.

Почему это?ReturnUrl все еще виден в URL?

Ответы [ 3 ]

1 голос
/ 05 февраля 2010

Смешивание параметров строки запроса с POST технически несовместимо с RFC, вы должны делать одно или другое, но не оба. (Сказав, что я не сталкивался с браузером / веб-сервером, который не позволяет этого).

Если вы хотите сделать это «правильно», вы должны иметь ReturnUrl в качестве скрытого поля ввода в форме и извлекать его вместе с другими переменными формы на сервере.

0 голосов
/ 05 февраля 2010

Посмотрите здесь на объект HttpContext.Request.

В запросе GET или POST доступно много полезной информации.

http://msdn.microsoft.com/en-us/library/system.web.httprequest_members.aspx

0 голосов
/ 05 февраля 2010

в случае запроса POST, проверьте Request.Form["returnUrl"] свойство

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