C# 如何定义到多个区域的端点管线
我试图定义一个路由到多个区域的C# 如何定义到多个区域的端点管线,c#,asp.net-mvc,asp.net-core-3.0,asp.net-core-routing,C#,Asp.net Mvc,Asp.net Core 3.0,Asp.net Core Routing,我试图定义一个路由到多个区域的MapAreaControllerOute()。但是,在ASP.NET Core 3.0中,需要设置areaName:参数,从而将每条路由限制为单个区域。我不明白如何使用一条适用于多个地区的路线 我在这里已经阅读了许多关于堆栈溢出的问题,但这似乎是ASP.NET Core 3.0中的一个新要求。在ASP.NET Core中Ok,因此在阅读了一组额外的链接后,结果是区域控制器的属性丢失! 通过使用以下标记标记控制器: [Area("Area1")] [Route("A
MapAreaControllerOute()
。但是,在ASP.NET Core 3.0中,需要设置areaName:
参数,从而将每条路由限制为单个区域。我不明白如何使用一条适用于多个地区的路线
我在这里已经阅读了许多关于堆栈溢出的问题,但这似乎是ASP.NET Core 3.0中的一个新要求。在ASP.NET Core中Ok,因此在阅读了一组额外的链接后,结果是区域控制器的属性丢失! 通过使用以下标记标记控制器:
[Area("Area1")]
[Route("Area1/[controller]/[action]")]
public class Area1Controller : Controller
{
public IActionResult Index()
{
return View();
}
}
以及将路线改为:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "areas",
areaName: "areas",
pattern: "{area}/{controller=Home}/{action=Index}/{id?}"
);
}
一切似乎都按预期工作。您可以使用
MapControllerOute()
为区域编写通用模式:
然后区域控制器只需要区域
属性:
[Area("AreaName")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
难道更复杂的路线不应该先走吗?我注意到你在原来的帖子中这样做了,但在解决方案中有所改变。端点路由的文档仍然不完整且未发布,但所有以前的文档都建议使用以前的方法。所以我很好奇你为什么要相反的顺序。我不明白你的区域路线是如何运作的。Net Core 3.1的自动生成代码如下所示。请注意,名称值应为“areaRoute”。app.UseEndpoints(endpoints=>{endpoints.MapControllerRoute(名称:“areaRoute”,模式:{area:exists}/{controller=Home}/{action=Index}/{id?}”);endpoints.MapControllerRoute(名称:“default”,模式:{controller=Home}/{action=Index}/{id?}”);});在我看来,这之所以有效,是因为仅控制器类上的Route属性,而与调用MapAreaControllerRoute()无关。是否在Startup.cs中没有该块的情况下对其进行了测试?编辑:为什么不使用MapControllerRoute()呢如果您想创建一个非特定于某个区域的路由?@BobbyR。路由的顺序并不重要,至少在.NET 5中是这样。所有路由都会被处理,如果有多个路由匹配,则会选择最具体的路由。在我发表评论时,MSDN链接中给出了更具体的路由规则为有问题的发布版本开发文档。可用文档中有一些离奇的信息,让很多人无法理解。他们在几个月前发布了此版本的文档,现在相当简单。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapDefaultControllerRoute();
});
[Area("AreaName")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}