33

Come si utilizza uno Area in ASP.NET Core? Questo non è adeguatamente documentato!Come utilizzare un'area in ASP.NET Core

Supponiamo che abbia un'app che necessita di una sezione di amministrazione. Questa sezione richiede che le sue viste siano posizionate in quell'area. Tutte le richieste che iniziano con Admin/ dovranno essere reindirizzate a quell'area.

risposta

41

Al fine di includere uno spazio in un'applicazione ASP.NET core, in primo luogo abbiamo bisogno di includere un percorso convenzionale nel file Startup.cs (è meglio posizionarlo prima di ogni percorso non area):

In avvio .cs/Configure metodo:

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

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

poi fare una cartella denominata Areas nella radice app e fare un altro nome Admin all'interno dell'ex, anche fare queste cartelle all'interno Admin (ViewComponent è opzionale):

enter image description here

Ora creiamo un controller all'interno della cartella denominata ControllersAdminController, il contenuto può essere come:

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

Ora, al fine per questo al lavoro, avrete bisogno di creare Visualizzazioni per tutte le azioni che ne restituiscono una. La gerarchia per la vista è proprio come quello che hai in una cartella Visualizzazioni non zona:

enter image description here

Ora, si dovrebbe essere pronti per partire!

Domanda: Cosa succede se si dispone di un altro controller nella mia area?

Risposta:

Basta aggiungere un altro controller accanto AdminController e assicurarsi che i percorsi sono come i seguenti:

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

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

La parte importante è [Route("admin/[controller]")]. Con questo puoi mantenere lo stile di routing su admin/controller/action/...

+0

Questo è testato su RC1, RC2 e 1.0. Funziona completamente. – VSG24

+0

Ho creato un esempio come mostrato sopra e aggiungo l'area di amministrazione, funziona bene, ma quando ho pubblicato il mio progetto, non ha pubblicato l'area di amministrazione e le viste e i file, come posso gestirlo? – motevalizadeh

+0

@motevallizadeh, Un'altra mia domanda! https://stackoverflow.com/questions/37326068/asp-net-core-rc2-area-not-published – VSG24

Problemi correlati