你能用 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