У меня есть действие как это:
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
Это производит следующую ссылку: http://localhost:1855/Home/About/%C3%96sterreich
Я хочу ссылку, которая похожа на это - localhost:1855/Home/About/Österreich
Я попробовал.
Server.HtmlDecode("Österreich")
HttpUtility.UrlDecode("Österreich")
Ни один, кажется, не помогает. Что еще я могу попытаться получить свой желаемый результат?
Я думаю, что это проблема вашего браузера (IE).
Ваш код и так верен, явного кодирования UrlEncoding не требуется.
<%=Html.ActionLink("My_link", "About", "Home", new RouteValueDictionary {
{ "id", "Österreich" } }, null)%>
В ASP.NET MVC нет ничего плохого. См. URL-адреса Unicode в Интернете, например http://he.wikipedia.org/wiki/%D7%9B%D7%A9%D7%A8%D7%95%D7%AA в IE и в браузере, который правильно обрабатывает Unicode в URL-адресах. .
Например. chrome без проблем отображает URL-адреса Unicode. IE не декодирует "специальные" символы Юникода в адресной строке.
Это только косметическая проблема.
Я думаю, что ваше желание использовать URL без urlencode вполне оправдано, но я не думаю, что инструменты действительно облегчают это.
Будет ли размещение сгенерированной ссылки внутри
с текстом ссылки, представляющим собой некодированную строку, недостаточно? Это все равно будет плохо выглядеть в поле URL-адреса браузера, но ваш пользовательский интерфейс будет немного красивее.
Кроме того, в любом случае в Firefox URL-адрес, отображаемый в моей строке состояния, когда я наводю указатель мыши на вашу «уродливую» ссылку, показывает незашифрованную версию, так что она, вероятно, там тоже будет хорошо выглядеть.
Согласно RFC 1738 Uniform Resource Locators (URL) , поддерживается только US-ASCII, все остальные символы должны быть закодированы.
2.2. Проблемы с кодировкой символов URL-адресов URL-адреса представляют собой последовательности символов, то есть букв, цифр и специальных символов
. URL-адреса могут быть представлены различными способами: например, чернилами на бумаге или последовательностью октетов в кодированном наборе символов . Интерпретация URL-адреса зависит только от идентичности используемых символов .
В большинстве схем URL-адресов последовательности символов в различных частях URL-адреса
используются для представления последовательностей октетов , используемых в Интернет-протоколах.Например, в схеме ftp имя хоста , имя каталога и имена файлов представляют собой такие последовательности октетов , представленные частями URL-адреса. В этих частях октет может быть представлен символом, который имеет этот октет в качестве своего кода в кодированном наборе символов US-ASCII [20] .
Кроме того, октеты могут быть закодированы тройкой символов, состоящей из
символа "%", за которым следуют две шестнадцатеричные цифры (от "0123456789ABCDEF" ), который формирует шестнадцатеричное значение октета . (Символы abcdef также могут использоваться в шестнадцатеричной кодировке.)
Октеты должны быть закодированы, если они не имеют соответствующего графического символа
в США. -ASCII-кодированный набор символов , если использование соответствующего символа небезопасно, или , если соответствующий символ зарезервирован для некоторой другой интерпретации {{1 }} внутри конкретной схемы URL.
Нет соответствующей графики. US-ASCII: URL-адреса записываются только с использованием графических печатных символов из набора символов
US-ASCII. Шестнадцатеричные октеты 80-FF не используются в US-ASCII, а шестнадцатеричные октеты 00-1F и 7F представляют собой управляющие символы; они должны быть закодированы.