プロジェクトに複数のエリアがあります。プロジェクトフォーム.NETCore 2.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を使用する必要があり、複数領域を処理するための新しい構成は次のようになります[私が試したもの]
Reference# Endpoint Routing .net core 3-Multiple Areas & https://aregcode.com/blog/2019/dotnetcore-understanding-aspnet-endpoint-routing /
endpoints.MapControllerRoute(name: "areas", pattern: "{area}/{controller}/{action=Index}/{id?}");
しかし、それはうまくいきません。また、以下の方法で呼び出して成功しないようにしてください:-
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" });
個々のエリアでも機能していません
endpoints.MapAreaControllerRoute(name: "Area", areaName: "CRM", pattern: "CRM/{controller=Default}/{action=Index}/{id?}");
私は自分で問題を解決するだけで、この状況を克服するための解決策は次のとおりです。
Startup.csクラスで、複数の動的ルートを処理するために以下の行を追加しますAreas
endpoints.MapAreaControllerRoute(name: "areas", "areas", pattern: "{area:exists}/{controller=Default}/{action=Index}/{id?}");
ここでareasはAreasフォルダの名前です[デフォルト]。必要に応じて変更できます。
以下のようにコントローラーのヘッダーマークアップを変更します。-
[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マークアップを変更して、Controller ofAreasフォルダー内のターゲットアクションを呼び出します。
<a asp-area="CRM" asp-controller="Default" asp-action="Index">Home of CRM</a>