www.yoursite.com/image / http://images.google.com.ph/images/nav_logo7.png
我需要知道的是Controller Action和Global.asax路由
答案 0 :(得分:8)
冒号:
字符在URL的路径段中无效,因此您必须对其进行编码或完全删除。之后,您可以使用{*routeValue}
语法指定路由值应分配给URL的其余部分。
routes.MapRoute(
"Image",
"image/{*url}",
new { controller = "Image", action = "Index" }
);
对于网址http://www.yoursite.com/image/images.google.com.ph/images/nav_logo7.png
,上述路由将使用ImageController.Index()
url
参数执行"images.google.com.ph/images/nav_logo7.png"
。您如何选择处理协议(编码/删除)取决于您。
另请注意,网址权限可以由域名和端口号组成,以:
(www.google.com:80)分隔,也需要对其进行编码。
答案 1 :(得分:5)
如果您想在网址上发送网址作为参数,首先需要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 = "" }
);
答案 2 :(得分:1)
我首先不要尝试在您的路线中嵌入第二个网址。
如果我必须使用URL作为路由的一部分,我用替换字符替换斜杠,这样您就不会将URL作为格式错误的路径(即〜,|等)插入问题。 。)然后在控制器中用一些字符串替换重新翻译它们。如果可能的话,我会抛弃HTTP://并假设路由是按惯例的URL。
所以你的路线会变成:
www.yoursite.com/image/images.google.com.ph~images~nav_logo7.png
答案 3 :(得分:0)
URL-encoded slash in URL - Stack Overflow
这是同样的问题并解决了解决方案。
第一个解决方案。 将“://”替换为“/”。路由网址模式“image / {scheme} / {port} / {* url}”。
第二个解决方案 “image / {* url}”set * url value base64。