2010-01-22 3 views

ответ

8

двоеточие : символ не является действительным в сегменте пути в URL, так что вам придется либо кодировать его, или удалить его полностью. После этого вы можете использовать синтаксис {*routeValue}, чтобы указать, что для значения маршрута должна быть назначена оставшаяся часть URL-адреса.

routes.MapRoute( 
    "Image", 
    "image/{*url}", 
    new { controller = "Image", action = "Index" } 
); 

Для URL http://www.yoursite.com/image/images.google.com.ph/images/nav_logo7.png , выше маршрут будет выполняться ImageController.Index() с url аргументом "images.google.com.ph/images/nav_logo7.png". Как вы решаете иметь дело с протоколом (кодировать/удалять) зависит от вас.

Также имейте в виду, что авторитет URL может состоять из имени домена и номера порта, разделенного : (www.google.com:80), который также необходимо закодировать.

+0

':' не ваша единственная проблема, есть еще много зарезервированных символов, таких как '! \t * '(); : @ & = + $, /? % # [] '. Как вы гарантируете, что они не указаны в URL? Вы должны использовать полный URL-адрес UrlEncode по всему URL-адресу. Затем вы можете преобразовать% 2F обратно в '/', если это необходимо для preety – TFD

+0

. В моем первоначальном ответе предполагается, что требование касается URI, которые уже считались действительными. Таким образом, дополнительная кодировка не требуется. –

1

Я хотел бы начать, не пытаясь вставить второй URL в ваш маршрут.

В тех случаях, когда я должен использовать URL-адрес как часть маршрута, я заменяю косые черты альтернативным символом, поэтому у вас нет проблем с интерпретацией URL-адреса в качестве искаженного маршрута (т.е. ~, |, и т. д.), затем повторно передайте их с некоторыми замещающими строками в контроллере. И если это возможно, я бы отключил HTTP: // и предположил, что маршрут является URL-адресом по соглашению.

Так что ваш маршрут стал бы что-то вроде:

www.yoursite.com/image/images.google.com.ph~images~nav_logo7.png

5

Если вы хотите отправить URL как параметр на URL вам нужно URL Encode это первый

в C# использование Server.UrlEncode(string) из System.Web имен

Так что ваш пример будет выглядеть следующим образом:

www.yoursite.com/image/http%3a%2f%2fimages.google.com.ph%2fimages%2fnav_logo7.png 

И ваш шаблон маршрута может быть:

routes.MapRoute(
    "image", 
    "image/{url}", 
    new { controller = "Image", action = "Index", url = "" } 
); 
0

URL-encoded slash in URL - Stack Overflow

Это та же проблема, и решаемые решения.

1-е решение. Заменить ": //" на "/". Маршрутизация url-шаблона «image/{scheme}/{port}/{* url}".

2nd solution "image/{* url}" set * url value base64.

Смежные вопросы