Расширение URL-адреса ASP.NET MVC
У меня есть действие вроде этого:
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
Это приводит к следующей ссылке: http://localhost:1855/Home/About/%C3%96sterreich
Мне нужна ссылка, которая выглядит так: localhost: 1855/Главная/О/Österreich
Я пробовал.
Server.HtmlDecode("Österreich")
HttpUtility.UrlDecode("Österreich")
Ни одна из них не помогает. Что еще я могу попытаться получить желаемый результат?
Ответы
Ответ 1
Я думаю, что это проблема с вашим браузером (IE).
Ваш код верен, так как он не требует явного UrlEncoding.
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
В ASP.NET MVC нет ничего плохого. См. URL-адреса юникода в Интернете, например. http://he.wikipedia.org/wiki/%D7%9B%D7%A9%D7%A8%D7%95%D7%AA в IE и в браузере, который правильно обрабатывает юникод в URL-адресах.
например. chrome отображает URL-адреса unicode без каких-либо проблем. IE не расшифровывает "специальные" символы юникода в адресной строке.
Это только косметическая проблема.
Ответ 2
В соответствии с RFC 1738 Uniform Resource Locators (URL) поддерживается только US-ASCII, все другие символы должны быть закодированы.
2.2. URL Character Encoding Issues
URLs are sequences of characters, i.e., letters, digits, and special
символов. URL-адреса могут быть представлены различными способами: например, чернила на бумаги или последовательности октетов в кодированный набор символов. Интерпретация URL-адреса зависит только от на личность символов б.
In most URL schemes, the sequences of characters in different parts of a
URL используются для представления последовательностей октеты, используемые в интернет-протоколах. Для Например, в схеме ftp хозяин имя, имя каталога и имена файлов такие последовательности октетов, представленные частями URL. В этих частях октет может быть представленный символом, который имеет этот октет в качестве своего кода в пределах US-ASCII [20] кодированный набор символов.
In addition, octets may be encoded by a character triplet consisting of
символ "%", за которым следуют два шестнадцатеричные цифры (от "0123456789ABCDEF" ), которые формируют шестнадцатеричное значение октета. (The могут использоваться символы "abcdef" в шестнадцатеричных кодировках.)
Octets must be encoded if they have no corresponding graphic
в кодировке US-ASCII набора символов, если использование соответствующий символ небезопасен или если соответствующий символ зарезервировано для какой-либо другой интерпретации в рамках конкретной схемы URL.
No corresponding graphic US-ASCII:
URLs are written only with the graphic printable characters of the
Кодированный набор символов US-ASCII. октеты 80-FF шестнадцатеричные не используются в US-ASCII и октетах 00-1F и 7F шестнадцатеричные представляют контроль персонажи; они должны быть закодированы.
Ответ 3
Я думаю, что ваше желание URL-адреса, отличного от urlencode, действительно, но я не думаю, что инструменты действительно облегчают это.
Ответ 4
Поместил бы сгенерированную ссылку внутри <a>
, причем текст ссылки был бы некодированной строкой, а не быть достаточно хорош? Он по-прежнему выглядел бы плохо в поле URL-адреса браузера, но ваш пользовательский интерфейс был бы немного красивее.
Кроме того, в любом случае в Firefox URL-адрес, отображаемый в моей строке состояния, когда я нажимаю над вашей "уродливой" ссылкой, показывает незашифрованную версию, поэтому она, вероятно, тоже выглядит хорошо.