Использование Url.RouteUrl для перенаправления на URL с #,% и т. Д. - PullRequest
2 голосов
/ 05 октября 2009

В веб-приложении, над которым я работаю, мы хотели бы иметь возможность отображать информацию о ресурсах по заданному пути. Путь полностью виртуальный & ndash; он существует только в приложении & ndash; поэтому у нас нет особых проблем с тем, что пользователи устанавливают виртуальные пути, которые являются "странными" по обычным стандартам файловой системы.

Проблема: у нас есть маршрут, который читает что-то похожее на

/Files/{*path}

и мы пытаемся перенаправить с

Url.RouteUrl("File", new { path = somePath })

Обычно это работает, но не работает, если somePath содержит & или # среди других. В этих случаях я отстой. Я не могу UrlEncode(somePath) на данный момент, потому что RouteUrl выполняет свою собственную кодировку URL, но я не могу оставить их как есть, потому что в противном случае они обрабатываются неправильно (octothorp не передается в данные маршрутизации, и амперсанд смущает IIS). Есть ли разумный способ обойти это? Или мне просто нужно реализовать собственные маршруты с помощью интерполяции строк?

Ответы [ 2 ]

0 голосов
/ 15 октября 2009

Лучший ответ, который я нашел до сих пор, хотя он работает только на IIS7, - это следовать инструкциям на http://dirk.net/2008/06/09/ampersand-the-request-url-in-iis7/, чтобы отредактировать реестр и изменить некоторые из свойств IIS7 по умолчанию. Это неприемлемо для нас, так как мы создаем приложение, которое будет установлено на компьютерах конечных пользователей - и в любом случае, даже если бы мы этого не делали, был бы простой факт, что IIS6 и IIS5 не отвечают на эта последовательность. Любые идеи для более ранних версий IIS или способы программного переопределения этого поведения в IIS7 были бы замечательными.

0 голосов
/ 07 октября 2009

Я играл с вашим примером и не могу найти никаких проблем с использованием RouteUrl со специальными символами, как вы описали выше, по крайней мере, в моих тестовых средах. Метод RouteUrl правильно кодирует URL-адреса, и контроллер получает значение в декодированном виде без каких-либо проблем или дефектов.

Я протестировал это в IIS 7, а также на веб-сервере разработки VS 2008.

Можете ли вы предоставить более полный пример кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...