如何在 ASP.NET Core 8 MVC 中为区域创建路由、默认操作名称并在斜杠后指定 id(相对于“?id=”)?

问题描述 投票:0回答:1

如何在 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
中做到这一点时,为什么要到处做呢?) ?)。

我发现路由绝对令人恼火,因为设置似乎总是一个很大的痛苦。这是怎么回事?简单地引导我阅读另一篇文章可能行不通;必须有人非常具体地向我解释这一点。

提前致谢!

c# asp.net-core-mvc .net-8.0
1个回答
0
投票

您可以尝试以下代码在程序文件中设置路由:

 // 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)
       

您可以参考此文档了解更多详细信息:

路由到 ASP.NET Core 中的控制器操作

ASP.NET Core 中的区域

© www.soinside.com 2019 - 2024. All rights reserved.