创建自定义路由层次结构.asp.net MVC 5

本文关键字:net MVC asp 层次结构 自定义 路由 创建 | 更新日期: 2023-09-27 17:49:35

我当前的url路由是:

website.com/start/id
website.com/upload/id

这些路由是向导步骤。控制器命名为StartController, UploadController视图结构命名为~Views/Start/Index.cshtml, ~/Views/Upload/Index.cshtml

客户端请求url结构为:

website.com/build/start/id
website.com/build/upload/id

愿望:

  • 我不想使用"虚荣url",因为我想使用@Html。ActionLink和@Url。动作来尽可能地呈现我的url,这样我就可以在以后重命名控制器和控制器方法,并使它们"连接"@Html。ActionLink和@Url。行动更新。

  • 我确实想有我所有的方法在一个单一的父buildcontroller引用嵌套视图文件夹结构我的控制器方法返回以下视图:return View("~/Views/Build/Start/Index.cshtml")。我想让我的视图物理结构映射/匹配到我的控制器命名约定所以返回View();

我的问题:

有没有办法,我可以尊重我的"愿望"上面,实现这个自定义Url结构,而不必创建一个BuildController,包含我的StartController方法和我的UploadController方法?

我没有问题创建一个BuildController或改变我的视图文件夹和/或控制器的物理结构,但我要尊重@Url.Action("Start", "Build")的能力,而不必在我的代码"build/start"中写"手动",更重要的是,保持我的StartControllerUploadController代码,因为我不想在我的BuildController长大量的代码。

创建自定义路由层次结构.asp.net MVC 5

我会切换到属性例程。你必须把ActionLink方法改成RouteLink方法,但它的工作原理是一样的。

添加属性

[Route("build/start/{id:int}", Name = "WizardStep1")]

为每个控制器方法(适当地改变路由)。

生成一个链接,使用RouteLink:

@Html.RouteLink("WizardStep1", ...)

替换…使用额外的代码,您需要设置URL属性。