我目前的网址是:
website.com/start/id
website.com/upload/id
这些路线是向导步骤。
我的控制器名为StartController, UploadController
,我的视图结构为~Views/Start/Index.cshtml, ~/Views/Upload/Index.cshtml
客户要求他希望网址结构为:
website.com/build/start/id
website.com/build/upload/id
愿望:
我不想使用“vanity url”,因为我想尽可能使用@ Html.ActionLink和@ Url.Action来渲染我的网址,以便稍后重命名控制器和控制器方法那些“连接”@ Html.ActionLink和@ Url.Action更新。
我确实希望将所有方法都放在单个父BuildContoller中,它引用嵌套的View文件夹结构,让我的控制器方法返回以下视图:return View("~/Views/Build/Start/Index.cshtml")
。我希望能够将我的View物理结构映射/匹配到我的控制器命名约定,所以返回View();适用于控制器方法。
我的问题:
我是否可以尊重上面的“愿望”并实现此自定义Url结构,而无需创建包含我的StartController方法和UploadController方法的BuildController?
创建BuildController或更改View文件夹和/或控制器的物理结构没有问题,但我想尊重@Url.Action("Start", "Build")
的能力而不必在我的代码“{{1”中“手动”编写“更重要的是,保留我的build/start
和StartController
代码,因为我不想在BuildController中使用大量代码。
答案 0 :(得分:3)
我会切换到属性例程。您必须将ActionLink方法更改为RouteLink方法,但它的工作方式相同。
添加属性
[Route("build/start/{id:int}", Name = "WizardStep1")]
为每个控制器方法(适当地改变路线)。
要生成链接,请使用RouteLink:
@Html.RouteLink("WizardStep1", ...)
使用您需要设置URL属性的附加代码替换....