【问题标题】:Can you produce friendly URLs with an ActionLink?你能用 ActionLink 生成友好的 URL 吗?
【发布时间】:2013-06-03 10:45:34
【问题描述】:

我已经使用 ActionLinks 创建了一个页面链接 - 例如:

@Html.ActionLink(p.Name, "Details", new { URL = p.URL })

这会生成一个这样的 URL:

http://localhost/app/Home/Details?URL=the-cafe-name

我想要这样的网址:

http://localhost/app/the-cafe-name

URL 是随每个地点存储的值。

在这里使用 ActionLink 是最佳做法吗?如果是这样,我怎样才能让它产生友好的 URL(除了包含 ID 的形式,这似乎是自动完成的?)。

谢谢。

【问题讨论】:

  • 你有配置了url作为参数名的路由吗?
  • 是的。我可以输入我已使用 ActionLinks 来创建页面链接 - 例如:@Html.ActionLink(p.Name, "Details", new { URL = p.URL }) 这会生成这样的 URL:localhost/app/Home/Details?URL=the-cafe-name 我会像这样的 URL:localhost/app/the-cafe-name - 在浏览器中 - 工作正常。我只是想知道是否应该使用 ActionLink 来呈现此 URL?
  • 在你的路由配置文件中,路由定义是什么样的?你确定你已经创建了一个需要url 参数的新路由吗?你能把你的代码粘贴到你的路由配置文件中吗?
  • 从未来开始 - 我现在使用属性路由 - 我建议...

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing friendly-url


【解决方案1】:

您可以添加这样的 MapRoute 作为您的最后一条路线

        routes.MapRoute(
            name: "UrlFriendly",
            url: "{*url}",
            defaults: new { controller = "UrlFriendly", action = "Index" }
        );

如果您有一个复杂的网站,您将需要处理所有案例,这可能是大量的工作!

【讨论】:

  • 您能否解释一下这将如何处理 OP 所需的 http://localhost/app/the-cafe-name 网址?
  • 你可以使用 whildchar * 来处理它,比如 url: "app/{*url}",这样所有以 "app/" 开头的 url 都会被你的 UrlFriendly 控制器处理
  • 从未来 - 我现在使用属性路由 - 我会推荐。
猜你喜欢
  • 2010-12-27
  • 2010-11-07
  • 2016-01-13
  • 2013-05-23
  • 2017-02-13
  • 2015-02-04
  • 2011-07-15
  • 2018-05-17
  • 1970-01-01
相关资源
最近更新 更多