webentwicklung-frage-antwort-db.com.de

So verwenden Sie einen Bereich in ASP.NET Core

Wie verwende ich eine Area in ASP.NET Core? 

Ich habe eine App, die einen Admin-Bereich benötigt. Für diesen Abschnitt müssen die Ansichten in diesem Bereich platziert werden. Alle Anforderungen, die mit Admin/ beginnen, müssen in diesen Bereich umgeleitet werden.

37
Vahid Amiri

Um eine Area in eine ASP.NET Core-App aufzunehmen, müssen Sie zunächst eine herkömmliche Route in die Startup.cs-Datei aufnehmen (am besten vor einer nicht-area-Route):

In der Startup.cs/Configure-Methode:

app.UseMvc(routes =>
{
    routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Erstellen Sie dann einen Ordner mit dem Namen Areas im App-Stammverzeichnis und erstellen Sie einen weiteren Namen mit dem Namen Admin innerhalb des Vorgängers. Erstellen Sie auch diese Ordner in Admin.

 enter image description here

Jetzt erstellen wir einen Controller im Ordner Controllers mit dem Namen AdminController. Der Inhalt kann wie folgt aussehen:

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

Damit dies funktioniert, müssen Sie Ansichten für alle Aktionen erstellen, die eine zurückgeben. Die Hierarchie für Ansichten entspricht derjenigen, die Sie in einem Ordner außerhalb des Bereichs "Ansichten" haben:

 enter image description here

Jetzt solltest du gut sein!

Frage: Was ist, wenn ich einen anderen Controller in meinem Bereich habe?

Antworten:

Fügen Sie einfach einen weiteren Controller neben AdminController hinzu und stellen Sie sicher, dass die Routen wie folgt aussehen:

[Area("Admin")]
[Route("admin/[controller]")]
public class ProductsController : Controller
{
    public ProductsController()
    {
        //
    }

    [Route("{page:int?}")]
    public IActionResult Index()
    {
        return View();
    }
}

Der wichtige Teil ist [Route("admin/[controller]")]. Damit können Sie den Routingstil nach admin/controller/action/... beibehalten.

58
Vahid Amiri

Scaffolding hat alle Dateien generiert und die erforderlichen Abhängigkeiten hinzugefügt.

Für den Startcode der Anwendung sind jedoch möglicherweise zusätzliche Änderungen erforderlich, damit die Dinge von Ende zu Ende funktionieren. Fügen Sie der Methode Configure in der Startklasse Ihrer Anwendung den folgenden Code hinzu, sofern noch nicht geschehen:

    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")]

für mich geht das.

0
mukesh joshi

Implementierung von Bereichen im Routing Erstellen Sie zunächst einen Bereich (Admin) mit VS und fügen Sie den folgenden Code in Startup.cs ein Aktion und Hinzufügen von Folgendem Code: [Bereich („Admin“)] muss auf Controller-Ebene hinzugefügt werden, um das Routing für asp.net-Bereiche durchzuführen. Startup.cs

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                  name: "areas",
                  template: "{area:exists}/{controller=Login}/{action=Index}/{id?}"
                );
            });

Hinweis: Die Bereichszuweisung muss an erster Stelle stehen, wenn keine Bereichszuweisung vorhanden ist. Zum Hinzufügen der Bereichszuweisung ist area: exists obligatorisch.

Controller-Code:

[Area("Admin")] 
    public class LoginController : Controller
    {
        public IActionResult Index()
        {
            return Content("Area Admin Login Controller and Index Action");
        }
    }

Diese Route kann mit http: // localhost: 111/Admin aufgerufen werden

Zweite Möglichkeit zum Implementieren des Bereichsroutings: - Fügen Sie folgenden Code in startup.cs hinzu.

app.UseMvc(routes =>
            {
                routes.MapAreaRoute(
    name: "default",
    areaName: "Guest",
    template: "Guest/{controller}/{action}/{id?}",
    defaults: new { controller = "GuestLogin", action = "Index" });
            });

Erstellen Sie einen Bereich "Gast", fügen Sie "GuestLogin" -Controller und "Index" -Aktion hinzu und fügen Sie den folgenden Code in den neu erstellten Controller ein.

[Area("Guest")]
    public class GuestLoginController : Controller
    {
        public IActionResult Index()
        {
            return Content("Area Guest Login Controller and Index Action");
        }
    }

Diese Route kann mit http: // localhost: 111/Guest aufgerufen werden

0
Yogesh Sharma