www.yoursite.com/image/ http://images.google.com.ph/images/nav_logo7.pngкак вы это сделаете в обычном маршруте MVC?
Что мне нужно знать, вот Action Controller, и маршруты global.asax
www.yoursite.com/image/ http://images.google.com.ph/images/nav_logo7.pngкак вы это сделаете в обычном маршруте MVC?
Что мне нужно знать, вот Action Controller, и маршруты global.asax
двоеточие :
символ не является действительным в сегменте пути в 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), который также необходимо закодировать.
':' не ваша единственная проблема, есть еще много зарезервированных символов, таких как '! \t * '(); : @ & = + $, /? % # [] '. Как вы гарантируете, что они не указаны в URL? Вы должны использовать полный URL-адрес UrlEncode по всему URL-адресу. Затем вы можете преобразовать% 2F обратно в '/', если это необходимо для preety – TFD
. В моем первоначальном ответе предполагается, что требование касается URI, которые уже считались действительными. Таким образом, дополнительная кодировка не требуется. –
Я хотел бы начать, не пытаясь вставить второй URL в ваш маршрут.
В тех случаях, когда я должен использовать URL-адрес как часть маршрута, я заменяю косые черты альтернативным символом, поэтому у вас нет проблем с интерпретацией URL-адреса в качестве искаженного маршрута (т.е. ~, |, и т. д.), затем повторно передайте их с некоторыми замещающими строками в контроллере. И если это возможно, я бы отключил HTTP: // и предположил, что маршрут является URL-адресом по соглашению.
Так что ваш маршрут стал бы что-то вроде:
www.yoursite.com/image/images.google.com.ph~images~nav_logo7.png
Если вы хотите отправить 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 = "" }
);
URL-encoded slash in URL - Stack Overflow
Это та же проблема, и решаемые решения.
1-е решение. Заменить ": //" на "/". Маршрутизация url-шаблона «image/{scheme}/{port}/{* url}".
2nd solution "image/{* url}" set * url value base64.
Дайте нам ключ ... какой язык ?! какие рамки/платформы и т. д. и т. д. –
ASP.NET MVC 1, C# – h3n