【问题标题】:ASP.NET MVC URL generation extensibility pointsASP.NET MVC URL 生成扩展点
【发布时间】:2010-02-18 16:42:57
【问题描述】:

ASP.NET MVC 中 URL 生成的扩展点是什么?

  1. 路由 - 虚拟路径取决于它
  2. ???

附录 1
特别是,我不仅需要控制 URL 的路径部分,还需要控制主机。而且我想将我的生成逻辑嵌入到 MVC 框架中,以便对标准 Html.ActionLink 方法的任何调用都会涉及我的逻辑。这将是完美的。但是,在调查 MVC 源代码时,我迫切希望以一种简单的方式实现我的目标。

【问题讨论】:

    标签: asp.net-mvc url routing extensibility


    【解决方案1】:

    Routes 几乎就是它所在的位置。但请记住,您可以继承 Route 并提供自己的实现,而不使用键/值 URI 模板。

    没有什么能阻止您从头开始编写自己的解决方案,但没有什么意义,因为您已经有了一个可扩展的基础供您使用。

    【讨论】:

    • 感谢@Richard 的关注。但是,路由并没有给我足够的控制权。请参阅我的附录 1。
    • @Anton - 没有理由不能从路由中生成绝对 URL,可能是通过包含 siteName 值并将其查找到域。另外,我相信您可以从解析方面的自定义 Route 访问主机(或至少是原始请求)。
    【解决方案2】:

    路由扩展点

    • 路线
    • 路线限制
    • 路由处理程序

    在您的特定情况下,您必须编写自己的路由来填充与主机相关的其他 RouteData 项。解析您的 URL 将完全由您来完成。

    “{host}/{controller}/{action}”

    也许还可以创建您的自定义路由处理程序,这将使主机参数成为必需的。但这已经取决于您的特定需求。

    编辑

    我想this article about domain routing 可能对你有一些帮助。它看起来非常简单直接。

    【讨论】:

    • @Robert,编写自定义路由当然可以让我处理所谓的传入路由。但是,传出路由仅限于VirtualPathData,因此我无法控制生成的 URL 的主机部分。这就是问题所在!
    • 我想这可以使用自定义路由处理程序来解决。但除此之外,您还必须彻底学习路由,因为您可能还必须编写自己的 UrlRoutingHandler...
    【解决方案3】:

    确实,由于 Route 在 URL 生成期间只提供 VirtualPath 部分,因此不可能达到所需的灵活性。

    【讨论】:

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