【发布时间】:2010-01-22 12:30:58
【问题描述】:
www.yoursite.com/image/http://images.google.com.ph/images/nav_logo7.png
这里我需要知道的是控制器动作和 Global.asax 路由
【问题讨论】:
-
给我们一个线索...什么语言?!什么框架/平台等
标签: asp.net-mvc asp.net-mvc-routing
www.yoursite.com/image/http://images.google.com.ph/images/nav_logo7.png
这里我需要知道的是控制器动作和 Global.asax 路由
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-routing
冒号 : 字符在 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) 分隔,这也需要进行编码。
【讨论】:
: 不是您唯一的问题,还有更多保留字符,例如 ! * ' ( ) ; : @ & = + $ , / ? % # [ ]。你如何保证它们不在 URL 中?您应该在整个 URL 上使用完整的 UrlEncode。然后,您可以将 %2F 转换回 /,如果它需要很漂亮
如果你想发送一个 URL 作为 URL 的参数,你需要先URL Encode它
在 c# 中使用来自 System.Web 命名空间的 Server.UrlEncode(string)
所以你的例子看起来像:
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。
在我必须使用 URL 作为路由的一部分的情况下,我将斜杠替换为备用字符,这样您就不会遇到将 URL 作为格式错误的路由(即~、| 等)的问题.) 然后用控制器中的一些字符串替换重新翻译这些。如果可能的话,我会放弃 HTTP:// 并假设路由是按照惯例的 URL。
所以你的路线会变成这样:
www.yoursite.com/image/images.google.com.ph~images~nav_logo7.png
【讨论】:
URL-encoded slash in URL - Stack Overflow
这是同样的问题并解决了解决方案。
第一种解决方案。 将“://”替换为“/”。路由 url 模式“image/{scheme}/{port}/{*url}”。
第二个解决方案 "image/{*url}" 设置 *url 值 base64。
【讨论】: