Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何定义到多个区域的端点管线_C#_Asp.net Mvc_Asp.net Core 3.0_Asp.net Core Routing - Fatal编程技术网

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();
    }
}