多个 URL 路由到单个操作方法
本文关键字:单个 操作方法 路由 URL 多个 | 更新日期: 2023-09-27 18:37:06
这可能是
非常简单的事情,但谷歌搜索并没有让我得到任何地方。
在我们正在构建的 Web 应用程序中,我们有项目和模板。模板实际上只是项目,IsTemplate 标志设置为 true。因此,很自然地,我们有一个项目控制器来处理(或将处理)这两种情况。
我们有一条通往控制器上New
操作方法的路由:
Project/New
这只是处理该路线的标准{controller}/{action}/{id}
路线。现在,New
操作方法具有一个IsTemplate
参数。我希望有一条路由将其作为 false 传入(上面的一条),而另一条路由将其作为 true 传入:
Templates/New
这样的不同 URL 屏蔽任意操作方法参数的正确方法是什么?我尝试了以下内容,但它只是混淆了路由(Html.ActionLink
最终指向Templates/New
):
routes.MapRoute(
null,
"Template/New",
new { controller = "Project", action = "New", IsTemplate = true }
);
或者,将其拆分为两个操作方法,并让它们调用具有硬编码参数值的单个专用控制器方法,对我来说会简单得多?
似乎这可能是最简单的选择。我将单个New
操作方法拆分为两个操作方法,这两个操作方法都定义了不同的路由,以及第三个执行所有工作的私有方法。如果有更漂亮的方法,我仍然愿意接受建议。
[HttpGet]
//Action method for a new template
public ActionResult NewTemplate() {
return New(true, null);
}
[HttpGet]
//Action method for a new project
public ActionResult New(int? TemplateProjectID) {
return New(false, TemplateProjectID);
}
private ActionResult New(bool IsTemplate, int? TemplateProjectID) {
//Assorted code follows
也许RouteUrl
可以帮助你?例如,如果您将路由命名为TemplateNew
,您应该能够为其创建一个 url:
<a href="@Url.RouteUrl("TemplateNew")">New Template</a>