如何在 ASP.NET Core 8 MVC 中为区域中的页面创建路由,默认操作名称,同时允许在斜杠后指定 id(相对于“?id=”)?我在网上阅读了大量文章,尝试了几种方法,但根本行不通。
这是网址:
https://localhost:7280/Dashboard/Waterbody/1245839?at=organization&ttid=-1
此网址有效:
https://localhost:7280/Dashboard/Waterbody/Index/1245839?at=organization&ttid=-1
但我不想
Index
出现在其中。
就像这个一样:
https://localhost:7280/Dashboard/Waterbody/?id=1245839&at=organization&ttid=-1
但我不想
?id=
出现在其中。
这是
Program.cs
的部分,显示了我的路线:
app.UseRouting();
app.MapAreaControllerRoute(
name: "Dashboard",
areaName: "Dashboard",
pattern: "Dashboard/{controller=Home}/{action=Index}/{id?}"
);
app.MapControllerRoute(name: "Default", pattern: "{controller=Home}/{action=Index}/{id?}");
这是控制器方法签名:
public ActionResult Index(int id)
我尝试在上面的其他路线之前添加这条路线,但它搞砸了:
app.MapAreaControllerRoute(
name: "Dashboard_Waterbody",
areaName: "Dashboard",
pattern: "Dashboard/{controller=Waterbody}/{action=Index}/{id?}"
);
此路由在站点的 .NET Framework 版本中有效:
context.MapRoute(
name: "Dashboard_Waterbody_Index",
url: "Dashboard/Waterbody/{id}",
defaults: new { controller = "Waterbody", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "Thing.Areas.Dashboard.Controllers" }
);
context.MapRoute(
name: "Dashboard_Default",
url: "Dashboard/{controller}/{action}/{id}",
defaults: new { area= "Dashboard", action = "Index", controller = "Home", id = UrlParameter.Optional },
namespaces: new string[] { "Thing.Areas.Dashboard.Controllers" }
);
我没有在控制器上使用自定义路由属性/过滤器(即:
[Route("Dashboard/Waterbody/Index/{id}")]
,我也不想这样做(当我应该能够在Program.cs
或Startup.cs
中做到这一点时,为什么要到处做呢?) ?)。
我发现路由绝对令人恼火,因为设置似乎总是一个很大的痛苦。这是怎么回事?简单地引导我阅读另一篇文章可能行不通;必须有人非常具体地向我解释这一点。
提前致谢!
您可以尝试以下代码在程序文件中设置路由:
// Specific route for Waterbody in Dashboard area
app.MapAreaControllerRoute(
name: "Dashboard_Waterbody",
areaName: "Dashboard",
pattern: "Dashboard/Waterbody/{id:int}",
defaults: new { controller = "Waterbody", action = "Index" }
);
// General area route
app.MapAreaControllerRoute(
name: "Dashboard",
areaName: "Dashboard",
pattern: "Dashboard/{controller=Home}/{action=Index}/{id?}"
);
app.MapControllerRoute(
name: "Default",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
控制器:
public IActionResult Index(int id)
您可以参考此文档了解更多详细信息: