【问题标题】:how will you do this in MVC custom route?你将如何在 MVC 自定义路由中做到这一点?
【发布时间】: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


【解决方案1】:

冒号 : 字符在 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 转换回 /,如果它需要很漂亮
  • 我的原始答案假设该要求处理已被视为有效的 URI。因此,不需要额外的编码。
【解决方案2】:

如果你想发送一个 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 = "" }
);

【讨论】:

    【解决方案3】:

    我会先不尝试在您的路由中嵌入第二个 URL。

    在我必须使用 URL 作为路由的一部分的情况下,我将斜杠替换为备用字符,这样您就不会遇到将 URL 作为格式错误的路由(即~、| 等)的问题.) 然后用控制器中的一些字符串替换重新翻译这些。如果可能的话,我会放弃 HTTP:// 并假设路由是按照惯例的 URL。

    所以你的路线会变成这样:

    www.yoursite.com/image/images.google.com.ph~images~nav_logo7.png

    【讨论】:

      【解决方案4】:

      URL-encoded slash in URL - Stack Overflow

      这是同样的问题并解决了解决方案。

      第一种解决方案。 将“://”替换为“/”。路由 url 模式“image/{scheme}/{port}/{*url}”。

      第二个解决方案 "image/{*url}" 设置 *url 值 base64。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多