Параметры URL не кодируются правильно! - PullRequest
0 голосов
/ 13 мая 2010

Я использую asp.net mvc версии 1.0, и у меня проблема с некоторым параметром в URL!

Мой URL выглядит так (http://localhost:2282/Tags/PostList/c#)

 routes.MapRoute(
           "TagsRoute",
           "Tags/PostList/{tag}",
           new { controller="Tags",Action="PostList",tag = "" }
       );

В действительности проблема в том, что параметр тега не кодируется, поэтому символ simbol # игнорируется!

Я использую actionlink, но, возможно, с версией 1.0 напрямую не кодируется параметр!

 <%=Html.ActionLink(itemtags.Tags.TagName,
                               "PostList","Tags",
                            new { tag = itemtags.Tags.TagName }, 
                            new { style = "color:red;" })%>

С помощью этой ссылки действия только правильные кодировки пробела, infact asp.net mvc становится asp.net% 20mvc, и он работает отлично! Но C # не кодирует: (

Поэтому я пытаюсь использовать Server.UrlEncode, и в действительности это случается с некоторыми вещами !!!

Infact c # стал c% 2523, но это снова неверно, поскольку шестнадцатеричное число # равно% 23!

Есть ли у вас какие-то решения ???? Маршрутные ограничения?

Спасибо

1 Ответ

0 голосов
/ 13 мая 2010

Вы получаете двойное кодирование где-нибудь. % 25 является символом%, поэтому:

'#' ->% 23

'% 23' ->% 2523

Трудно определить, уже закодированы данные или нет, особенно после того, как вы бросите служебные методы в цикл (потому что они могут вызывать еще другие служебные методы, которые также кодируют данные). Единственное решение, которое я нашел в этом, что спасло мою волосную линию - это использование класса тегов для данных, которые я уже однажды закодировал, вместо того, чтобы везде передавать мой текст как один и тот же тип данных (например, String).

Любой метод, который кодирует данные, никогда не принимает строку и возвращает строку. Он принимает строку и возвращает объект, который содержит строку (закодирован).

...