Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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# 如何在.NET Core 3.x中配置多个区域_C#_Asp.net Core_Area_.net Core 3.1 - Fatal编程技术网

C# 如何在.NET Core 3.x中配置多个区域

C# 如何在.NET Core 3.x中配置多个区域,c#,asp.net-core,area,.net-core-3.1,C#,Asp.net Core,Area,.net Core 3.1,我在me项目中有多个区域。在将项目从.NETCore2.2升级到3.1之后,这些区域不再工作/调用 我的控制器内部区域看起来像:- [Area(nameof(CRM))] [Authorize] [ServiceFilter(typeof(ActionFilter))] public class DefaultController : Controller { public IActionResult Index() { return View(); }

我在me项目中有多个区域。在将项目从.NETCore2.2升级到3.1之后,这些区域不再工作/调用

我的控制器内部区域看起来像:-

[Area(nameof(CRM))]
[Authorize]
[ServiceFilter(typeof(ActionFilter))]
public class DefaultController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
以前处理多个区域的配置如下所示:-

   routes.MapRoute(name: "Area", template: "{area:exists}/{controller=Default}/{action=Index}/{id?}");
   routes.MapRoute(name: "Area Default Create", template: "{area:exists}/{controller=Default}/create", defaults: new { action = "CreateOrEdit" });
   routes.MapRoute(name: "Area Default Edit", template: "{area:exists}/{controller=Default}/edit/{id}", defaults: new { action = "CreateOrEdit" });
因为我们必须在.NET Core 3.1中使用UseEndpoints,处理多个区域的新配置如下[我尝试过的]

参考

但是,这是不可行的,也尝试通过以下方式调用&不成功:-

endpoints.MapAreaControllerRoute(name: "Area", areaName: "areas", pattern: "{area:exists}/{controller=Default}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(name: "Area Default Create", areaName: "areas", pattern: "{area:exists}/{controller=Default}/create", defaults: new { action = "CreateOrEdit" });
endpoints.MapAreaControllerRoute(name: "Area Default Edit", areaName: "areas", pattern: "{area:exists}/{controller=Default}/edit/{id}", defaults: new { action = "CreateOrEdit" });
甚至它也不适用于单个区域

参考


我只是自己解决问题,下面是克服这种情况的解决方案:-

在Startup.cs类中,添加用于处理多个区域的动态路由的行下方

endpoints.MapAreaControllerRoute(name: "areas", "areas", pattern: "{area:exists}/{controller=Default}/{action=Index}/{id?}");  
此处区域是区域文件夹的名称[默认设置]。你可以随意改变它

更改控制器的标题标记,如下所示:-

[Area(nameof(CRM))]  // CRM is the another-folder name inside Areas folder
[Route("CRM/[controller]/[action]")]
[Authorize]
[ServiceFilter(typeof(ActionFilter))]
public class DefaultController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
最后更改您的Razor标记,如下面所示,以在区域文件夹的控制器内调用您的目标操作

<a asp-area="CRM" asp-controller="Default" asp-action="Index">Home of CRM</a>
客户关系管理之家

我只是自己解决问题,下面是克服这种情况的解决方案:-

在Startup.cs类中,添加用于处理多个区域的动态路由的行下方

endpoints.MapAreaControllerRoute(name: "areas", "areas", pattern: "{area:exists}/{controller=Default}/{action=Index}/{id?}");  
此处区域是区域文件夹的名称[默认设置]。你可以随意改变它

更改控制器的标题标记,如下所示:-

[Area(nameof(CRM))]  // CRM is the another-folder name inside Areas folder
[Route("CRM/[controller]/[action]")]
[Authorize]
[ServiceFilter(typeof(ActionFilter))]
public class DefaultController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
最后更改您的Razor标记,如下面所示,以在区域文件夹的控制器内调用您的目标操作

<a asp-area="CRM" asp-controller="Default" asp-action="Index">Home of CRM</a>
客户关系管理之家

那么[Area]属性做什么?如果您必须用[Route]属性装饰控制器,那么区域属性有任何用处吗?那么[Area]属性做什么呢?如果必须使用[Route]属性装饰控制器,区域属性是否有任何用处?