ASP.NET CoreでArea
を使用するにはどうすればよいですか?
管理セクションが必要なアプリがあります。このセクションでは、そのビューにそのビューを配置する必要があります。 Admin/
で始まるすべてのリクエストは、そのエリアにリダイレクトする必要があります。
ASP.NET Coreアプリにエリアを含めるには、最初にStartup.cs
ファイルに従来のルートを含める必要があります(エリア以外のルートの前に配置するのが最善です)。
Startup.cs/Configureメソッドで:
app.UseMvc(routes =>
{
routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
次に、アプリルートにAreas
という名前のフォルダーを作成し、前者内に別のAdmin
という名前を作成し、これらのフォルダーをAdmin
内に作成します(ViewComponentはオプションです)。
Controllers
という名前のAdminController
フォルダー内にコントローラーを作成します。コンテンツは次のようになります。
[Area("Admin")]
[Route("admin")]
public class AdminController : Controller
{
public AdminController()
{
// do stuff
}
public IActionResult Index()
{
return View();
}
[Route("[action]/{page:int?}")]
public IActionResult Orders()
{
return View();
}
[Route("[action]")]
public IActionResult Shop()
{
return View();
}
[Route("[action]/newest")]
public IActionResult Payments()
{
return View();
}
}
これが機能するためには、1つを返すすべてのアクションのビューを作成する必要があります。ビューの階層は、非エリアビューフォルダにあるものとまったく同じです。
さて、あなたは行ってもいいはずです!
質問:自分のエリア内に別のコントローラーを置く場合はどうなりますか?
回答:
AdminController
の横に別のコントローラーを追加し、ルートが次のようになっていることを確認してください。
[Area("Admin")]
[Route("admin/[controller]")]
public class ProductsController : Controller
{
public ProductsController()
{
//
}
[Route("{page:int?}")]
public IActionResult Index()
{
return View();
}
}
重要な部分は[Route("admin/[controller]")]
です。これにより、admin/controller/action/...
へのルーティングのスタイルを維持できます
足場はすべてのファイルを生成し、必要な依存関係を追加しました。
ただし、アプリケーションのスタートアップコードでは、エンドツーエンドで動作するように追加の変更が必要になる場合があります。次のコードをアプリケーションのStartupクラスのConfigureメソッドに追加します(まだ実行されていない場合)。
app.UseMvc(routes =>
{
route.MapRoute(
name : "areas",
template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
With .net core, following is needed to be added in the startup file if you are adding an area:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
After that you can just simply mark your area and route in the controller, i.e
[Area("Order")]
[Route("order")]
わたしにはできる。
ルーティングでのエリア実装まずVSを使用してArea(Admin)を作成し、Startup.csに次のコードを追加します。アクションおよび次のコードの追加、[Area( "Admin")]は、asp.netエリアルーティングを実行するためにコントローラーレベルで追加することが必須です。 Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Login}/{action=Index}/{id?}"
);
});
注:エリアルーティングは、非エリアルーティングで最初に配置する必要があります。area:existsは、エリアルーティングを追加するために必須です。
コントローラーコード:
[Area("Admin")]
public class LoginController : Controller
{
public IActionResult Index()
{
return Content("Area Admin Login Controller and Index Action");
}
}
このルートは http:// localhost:111/Admin を使用して呼び出すことができます
エリアルーティングを実装する2番目の方法:-次のコードをstartup.csに追加します。
app.UseMvc(routes =>
{
routes.MapAreaRoute(
name: "default",
areaName: "Guest",
template: "Guest/{controller}/{action}/{id?}",
defaults: new { controller = "GuestLogin", action = "Index" });
});
エリア「Guest」を作成し、「GuestLogin」コントローラーと「Index」アクションを追加して、新しく作成したコントローラーに次のコードを追加します。
[Area("Guest")]
public class GuestLoginController : Controller
{
public IActionResult Index()
{
return Content("Area Guest Login Controller and Index Action");
}
}
このルートは http:// localhost:111/Guest を使用して呼び出すことができます