你能用 ActionLink 生成友好的 URL 吗?

Posted

技术标签:

【中文标题】你能用 ActionLink 生成友好的 URL 吗?【英文标题】:Can you produce friendly URLs with an ActionLink? 【发布时间】: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 参数的新路由吗?你能把你的代码粘贴到你的路由配置文件中吗? 从未来开始 - 我现在使用属性路由 - 我建议... 【参考方案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 控制器处理 从未来 - 我现在使用属性路由 - 我会推荐。

以上是关于你能用 ActionLink 生成友好的 URL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Razor actionlink 在 URL 中自动生成 ?length=7?

每日踩坑 2018-11-26 MVC Razor ActionLink 生成的URL中多生成了一个参数 ?length=n

使用Action()和ActionLink()生成链接

004_URL 路由 - 高级路由特性

你能用纯序言写 between/3 吗?

liquibase:你能用 liquibase addColumn 指定“列后”吗?