как бороться с "+" в маршрутах asp.net mvc3? - PullRequest
0 голосов
/ 21 февраля 2012

мои маршруты:

routes.MapRoute(
    "Tag",
    "tag/{t}/{action}",
    new { controller = "tag", action = "unsolved" }
    );

ссылка типа:

<a href="/tag/@(Uri.EscapeDataString(tagName))/unsolved">@tagName</a>

, если tagName не содержит "+", все работает хорошо, иначе, например, "http://www.test.com/tag/c%2B%2B/unsolved"(%2B"@ (Uri.EscapeDataString ("+")), я получаю сообщение об ошибке: ошибка HTTP 404.11 - не найдено

кто мне может помочь? Спасибо!

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Вы можете попробовать разрешить двойное экранирование в разделе <system.webServer> вашего web.config, так как я подозреваю, что у вас есть эта проблема только в IIS 7, а не на сервере разработки Visual Studio (который, кстати, вы должны были упомянутьв вашем вопросе):

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

Подробнее: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

0 голосов
/ 21 февраля 2012

Ваше веб-приложение MVC создает ссылку, содержащую любой символ (%, +, / и т. Д.). Поэтому используйте URL, закодируйте строку и сгенерируйте ссылку:

new UrlHelper(HttpContext.Current.Request.RequestContext)
       .RouteUrl("Tag", 
                 new { tagName= HttpContext.Current.Server.UrlEncode(tagName) };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...