Почему ASP.net MVC автоматически не декодирует параметры POST (иначе формы)? - PullRequest
2 голосов
/ 17 декабря 2011

Я провел несколько базовых тестов с System.Net.WebClient и веб-сайтом ASP.net MVC 3 и обнаружил, что при привязке к параметрам действия MVC автоматически декодирует любые параметры строки запроса,UrlEncoded, если вы используете GET.Но он не будет автоматически декодировать параметры POST.Для этого есть причина?Похоже на ненужные неудобства.

Ответы [ 2 ]

12 голосов
/ 17 декабря 2011

Привязка модели ASP.NET MVC по умолчанию использует провайдера Request.Form для чтения значений POST. Этот провайдер также автоматически декодирует закодированные в URL параметры.

Например, если вы отправляете следующую полезную нагрузку POST:

foo=%26&bar=%3D

в соответствующем действии контроллера вы получите правильные значения:

[HttpPost]
public ActionResult Test(string foo, string bar)
{
    // foo equals &
    // bar equals =
}

Таким образом, вы, вероятно, неправильно указали URL-адрес запроса.

1 голос
/ 08 июля 2016

Если вы используете jQuery.Post и отправляете данные в виде POST-данных, используя параметр данных, как показано в следующем фрагменте, тогда jquery автоматически закодирует для вас.

 var postdata = {
            url: someUrl, //do not encodeURIComponent, it's done by jquery.post. test with some edge url if in doubt
           };

        $.post(serverUrl, postdata)
            .done(function (data) {
            };

Если вы также закодируете себя, вы получите данные с двойным кодированием.Параметр контроллера Asp.net всегда декодируется один раз, в случае получения или отправки.

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