Расширение 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-адрес, отображаемый в моей строке состояния, когда я нажимаю над вашей "уродливой" ссылкой, показывает незашифрованную версию, поэтому она, вероятно, тоже выглядит хорошо.