как вы будете делать это в пользовательском маршруте MVC? - PullRequest
0 голосов
/ 22 января 2010

www.yoursite.com / изображение / http://images.google.com.ph/images/nav_logo7.png

Что мне нужно знать здесь, так это действие контроллера и маршруты Global.asax

Ответы [ 4 ]

8 голосов
/ 27 января 2010

Символ двоеточия : недопустим в сегменте пути 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), которые также необходимо кодировать.

5 голосов
/ 27 января 2010

Если вы хотите отправить URL-адрес в качестве параметра URL-адреса, вам нужно Кодировать URL-адрес сначала

В 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 = "" }
);
1 голос
/ 22 января 2010

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

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

Итак, ваш маршрут станет примерно таким:

www.yoursite.com / изображение / images.google.com.ph ~ изображения ~ nav_logo7.png

0 голосов
/ 27 января 2010

косая черта в URL в URL - переполнение стека

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

1-й раствор. Заменить ": //" на "/". Шаблон маршрутизации URL "image / {схема} / {порт} / {* url}".

2-й раствор "image / {* url}" установить * значение URL base64.

...