gpt4 book ai didi

asp.net - 具有不同参数类型的 MVC3 路由

转载 作者:行者123 更新时间:2023-12-02 02:05:44 25 4
gpt4 key购买 nike

我正在努力了解 MVC3 中的路由。

以前我通常只是避开整个区域并坚持使用丑陋的旧 ?id=1&foo=bar 类型网址。不太好。

我这样定义了4条路线

routes.MapRoute("Blog", "{controller}/{action}/{PageNumber}/{PostsPerPage}", new { controller = "blog", action = "list", PageNumber = UrlParameter.Optional, PostsPerPage = UrlParameter.Optional });
routes.MapRoute("Code", "{controller}/{action}/{title}", new { });
routes.MapRoute("Id", "{controller}/{action}/{id}", new { });
routes.MapRoute("Default", "{controller}/{action}", new { controller = "home", action = "index" });

我尝试按照从最具体到最不具体的顺序排列它们。

第一个“博客”路由工作正常,我可以使用像 /blog/list/2/5 这样的 URL,它会正确映射到我的 Controller 。

底部的默认路由也按我的预期工作。

但是,如果我有这样的操作方法:

public ActionResult BarX(int id)
{
//some stuff
}

public ActionResult BarY(string title)
{
//some stuff
}

我希望它使用第三条路由并生成类似 /foo/barX/3 的 URL。

但是如果我使用

@Html.ActionLink("TEST1", "barX", "foo", new { id = 3 }, null)

生成的URL是

/foo/barx?id=3

生成的 URL 类似
@Html.ActionLink("TEST2", "barY", "foo", new { title = "test" }, null)

/foo/bary?title=test

所以我想我的问题是:为什么他们使用旧的 ?id= 语法而不是 /foo/barx/3 生成 URL?

最佳答案

您的所有路线基本上都是相同的。他们是

{controller}/{action}/{param}/{param}

我这么说是因为路由引擎无法理解 {controller}/{action}/{id}{controller}/{action}/{title} 之间的区别

路由引擎真的会看到

{controller}/{action}/{PageNumber}/{PostsPerPage}

并将所有路由与第一个路由混淆。

<小时/>

一旦路由引擎在顶部看到几乎通用的 {可选}/{可选}/{可选}/{可选}/ 路由,任何具有 4 个或更少元素的内容都可以容纳它,因此它不再继续。

<小时/>

另一方面,如果您的路线有独特的开头,而不是通用的 {Controller}:

routes.MapRoute("Blog", "Blog/{PageNumber}/{PostsPerPage}", new { controller = "blog", action = "list", PageNumber = UrlParameter.Optional, PostsPerPage = UrlParameter.Optional });
routes.MapRoute("Code", "Code/{title}", new { controller = "code", action = "list", title = UrlParameter.Optional });
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "home", action = "index", id = UrlParameter.Optional });

现在,每当路由引擎看到 Blog/... 时,它就会明白只有 1 个路由可以匹配。与所有其他人一样,它将继续寻找匹配。每当它看到 Code/... 时,同样只有 1 个路由是匹配的。默认值将处理诸如 {Controller}/{Action}/{id} 之类的没有 BlogCode 作为第一条路线的内容参数。

关于asp.net - 具有不同参数类型的 MVC3 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605945/

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