gpt4 book ai didi

asp.net-mvc - 带有默认 Controller 的 ASP.NET MVC 路由

转载 作者:行者123 更新时间:2023-12-03 21:18:45 26 4
gpt4 key购买 nike

对于一个场景,我有一个 ASP.NET MVC 应用程序,其 URL 如下所示:

http://example.com/Customer/List
http://example.com/Customer/List/Page/2
http://example.com/Customer/List
http://example.com/Customer/View/8372
http://example.com/Customer/Search/foo/Page/5

这些 URL 是通过 Global.asax.cs 中的以下路由实现的
routes.MapRoute(
"CustomerSearch"
, "Customer/Search/{query}/Page/{page}"
, new { controller = "Customer", action = "Search" }
);

routes.MapRoute(
"CustomerGeneric"
, "Customer/{action}/{id}/Page/{page}"
, new { controller = "Customer" }
);

//-- Default Route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Customer", action = "Index", id = "" }
);

这些都进行得很顺利,直到一个新的需求出现并希望从 URL 中删除关键字“客户”,使 URL 看起来像:
http://example.com/List
http://example.com/List/Page/2
http://example.com/List
http://example.com/View/8372
http://example.com/Search/foo/Page/5

编辑:感谢@haacked,更正了示例链接。

我尝试添加新的 MapRoutes采取 {action}只有并将默认 Controller 设置为客户。例如/
routes.MapRoute(
"CustomerFoo"
, "{action}"
, new { controller = "Customer", action = "Index" }
);

这似乎可行,但是现在由 Html.ActionLink() 生成的所有链接都很奇怪并且不再对 URL 友好。

那么,这可以实现吗?我在朝着正确的方向前进吗?

最佳答案

不要混合这样的规则:"{action}/{id}"一个是 "{controller}/{action}/{id}" ...特别是当后面的 id 具有默认值时,即是可选的。

在这种情况下,您没有任何东西可以让路由知道哪个是正确的。

如果您需要,一种解决方法是在前面的操作中添加一个约束(参见 this)到一组值,即列表、 View 。当然,使用这些类型的规则,您不能拥有与 Action 名称相同的 Controller 。

还请记住,如果您在 "{action}/{id}" 中指定默认操作和 id规则,将在您点击站点的路线时使用。

关于asp.net-mvc - 带有默认 Controller 的 ASP.NET MVC 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com