web-dev-qa-db-ja.com

ASP.NET Coreでエリアを使用する方法

ASP.NET CoreでAreaを使用するにはどうすればよいですか?

管理セクションが必要なアプリがあります。このセクションでは、そのビューにそのビューを配置する必要があります。 Admin/で始まるすべてのリクエストは、そのエリアにリダイレクトする必要があります。

44
Vahid Amiri

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はオプションです)。

enter image description here

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つを返すすべてのアクションのビューを作成する必要があります。ビューの階層は、非エリアビューフォルダにあるものとまったく同じです。

enter image description here

さて、あなたは行ってもいいはずです!

質問:自分のエリア内に別のコントローラーを置く場合はどうなりますか?

回答:

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/...へのルーティングのスタイルを維持できます

68
Vahid Amiri

足場はすべてのファイルを生成し、必要な依存関係を追加しました。

ただし、アプリケーションのスタートアップコードでは、エンドツーエンドで動作するように追加の変更が必要になる場合があります。次のコードをアプリケーションのStartupクラスのConfigureメソッドに追加します(まだ実行されていない場合)。

    app.UseMvc(routes =>
    {
      route.MapRoute(
        name : "areas",
        template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
      );
    });
2
Elnaz
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")]

わたしにはできる。

0
mukesh joshi

ルーティングでのエリア実装まず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 を使用して呼び出すことができます

0
Yogesh Sharma