2016-01-11 9 views
6

OK, so che il modo più semplice per utilizzare l'attributo di routing in MVC 6 è:MVC 6 attributo Routing utilizzando il nuovo "[Regolatore]/[azione]" Gettoni e Aree

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseMvc(); 
    } 
} 

E qui è il controller codice utilizzando le nuove Tokens (senza Areas):

[Route("[controller]/[action]")] 
public class HomeController : Controller 
{ 
} 

Ed ecco il codice del controller utilizzando i nuovi token (con Areas):

[Area("MyArea")] 
[Route("[controller]/[action]")] 
public class HomeController : Controller 
{ 
} 

Domande:

  1. E 'così che MS vuole che codifichi i tuoi controller usando Aree e Token?
  2. O c'è un modo più pulito?
  3. Potrebbe aver creato in qualche modo un token [area]?

Infine, so che posso giocare a questo gioco, ma non è il primo approccio basato sulla convenzione - app.UseMvc() - il più semplice?

public void Configure(IApplicationBuilder app) 
{ 
    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "areaRoute", 
      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}" 
     ); 
    }); 
} 

risposta

0

Microsoft offre due opzioni, ciascuna con i propri pro e contro. Dovresti decidere quale è meglio in base al tuo contesto/esigenze.

Convenzione di routing basato

Pro:

  • E 'più semplice, invece di definire tutto su un livello per-action basta decidere una volta per tutte come il vostro URL saranno assomiglia.
  • Perfetto quando gli URL corrispondono esattamente ai nomi di controller/azione.
  • Se si desidera modificare e url è necessario modificare il nome della classe/metodo.
  • Perfetto per progetti con struttura url pulita e prevedibile.
  • Perfetto per la prototipazione rapida di un nuovo progetto.
  • leggermente più facile per gli sviluppatori -> conoscendo un URL sapere in quale controller/azione si trova la funzionalità

Contro:

  • È po 'sciolto controllo

Instradamento basato su attributi

Pro:

  • Ti dà il controllo totale su come appare l'url, ad esempio per scopi di SEO.
  • Se si desidera modificare un URL non è necessario modificare il nome della classe/metodo.
  • Perfetto quando gli URL non corrispondono ai nomi di controller e azioni o se si desidera eseguirli manualmente (i.e il cliente lo vuole).
  • Perfetto per mantenere la compatibilità con le versioni precedenti, quando si dispone di un progetto legacy e si desidera avere una struttura di url compatibile.

Contro:

  • Richiede po 'più di lavoro, è necessario definire i percorsi nel codice. Si noti che l'aggiunta di un attributo a una classe/metodo è questione di secondi.

come decidere quale usare:

  • Se avete/aspettare di avere pochissime routes.MapRoute() chiamate -> uso di routing convenzione come la sua semplice

  • Se hai/aspettare per avere un sacco di chiamate routes.MapRoute() -> utilizzare l'instradamento degli attributi