你将如何在MVC自定义路线中执行此操作?

时间:2010-01-22 12:30:59

标签: asp.net-mvc asp.net-mvc-routing

www.yoursite.com/image / http://images.google.com.ph/images/nav_logo7.png

我需要知道的是Controller Action和Global.asax路由

4 个答案:

答案 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。