MVC HttpUtility.UrlEncode - PullRequest
       28

MVC HttpUtility.UrlEncode

1 голос
/ 21 октября 2010

Я пытаюсь использовать HttpUtility.UrlEncode для кодирования строк, которые в конечном итоге используются в URL.

пример

/ строка / http://www.google.com

или

/ строка / моя тестовая строка

, где http://www.google.com - параметр, передаваемый в контроллер.

Я пробовал UrlEncode, но, похоже, он работает не совсем правильно

мой маршрут выглядит так:

routes.MapRoute(
            "mStringView",
            "mString/{sText}",
            new { controller = "mString", action = "Index", sText = UrlParameter.Optional }
        ); 

Проблема в том, что закодированные биты декодируются, кажется, что-то в маршрутизации ... за исключением того, что такие вещи, как "+", которые заменяют "", не декодируются.

Понимание моего случая, когда UrlParameter может быть любой строкой, включая URL-адреса. Каков наилучший способ кодировать их, прежде чем вставить их в мою базу данных, а затем обработать декодирование, зная, что они будут переданы контроллеру в качестве параметра

спасибо!

Ответы [ 3 ]

1 голос
/ 22 октября 2010

Кажется, эта проблема возникла на других форумах, и общая рекомендация - не полагаться на стандартную кодировку URL для asp.net mvc.Преимущество заключается в том, что URL-кодирование не обязательно так удобно для пользователя, как мы хотим, что является одной из целей пользовательских маршрутизируемых URL-адресов.Например, это:

http://server.com/products/Goods+%26+Services

может быть более дружественно записано как

http://server.com/products/Good-and-Services

Таким образом, пользовательское кодирование URL имеет преимущества по сравнению с обходом этой причуды / ошибки.Больше подробностей и примеров здесь:

http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

0 голосов
/ 02 декабря 2013

Если проблема в том, что «+» не декодируется, используйте HttpUtility.UrlPathEncode для кодирования, и декодирование будет работать как нужно.

Из документации HttpUtility.UrlEncode :

Вы можете кодировать URL, используя метод UrlEncode или UrlPathEncode метод. Однако методы возвращают разные результаты. Метод UrlEncode преобразует каждый пробел в символ плюс (+). Метод UrlPathEncode преобразует каждый пробел в строка "% 20", представляющая пробел в шестнадцатеричной записи. использование метод UrlPathEncode при кодировании части пути URL-адреса в Для того, чтобы гарантировать последовательный декодированный URL, независимо от того, какой Платформа или браузер выполняет декодирование.

0 голосов
/ 10 марта 2011

Вы можете преобразовать параметр в байтовый массив и использовать HttpServerUtility.UrlTokenEncode

...