33

Wie verwendet man einen Area in ASP.NET Core? Dies ist nicht richtig dokumentiert!Verwendung eines Bereichs in ASP.NET Core

Angenommen, ich habe eine App, die einen Admin-Abschnitt benötigt. In diesem Abschnitt müssen die Ansichten in diesem Bereich platziert sein. Alle Anfragen, die mit Admin/ beginnen, müssen in diesen Bereich umgeleitet werden.

Antwort

41

Um einen Bereich in einem ASP.NET-Core-App zu schließen, müssen wir zuerst in der Startup.cs Datei (es ist am besten, es vor alle nicht-Bereich Route zu platzieren) einen herkömmlichen Weg umfassen:

In 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?}"); 
}); 

Dann einen Ordner Areas in der App root und machen einen anderen Namen Admin im ehemaligen, auch machen diese Ordner innerhalb Admin (ViewComponent ist optional) mit dem Namen machen:

enter image description here

Nun erstellen wir einen Controller innerhalb des Controllers Ordner AdminController genannt, kann der Inhalt wie:

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

nun dafür zu arbeiten, um, müssen Sie Ansichten erstellen Alle Aktionen, die einen zurückgeben. Die Hierarchie für Ansichten ist wie, was Sie in einem nicht-Bereich Ansichten Ordner:

enter image description here

Nun sollten Sie gut zu gehen!

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

Antwort:

einfach einen anderen Controller neben AdminController hinzufügen und sicherstellen, dass die Routen sind wie folgt aus:

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

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

Der wichtigste Teil ist [Route("admin/[controller]")]. Damit können Sie den Routing-Stil auf admin/controller/action/...

+0

beibehalten Dies wird auf RC1, RC2 und 1.0 getestet. Es funktioniert völlig. – VSG24

+0

Ich habe ein Beispiel erstellt, wie Sie oben zeigen und Admin-Bereich hinzufügen, es funktioniert gut, aber wenn ich mein Projekt veröffentlicht, es nicht Admin-Bereich und Ansichten und Dateien veröffentlicht, wie kann ich damit umgehen? – motevalizadeh

+0

@motevallizadeh, Eine andere Frage von mir! https://stackoverflow.com/questions/37326068/asp-net-core-rc2-area-not-published – VSG24