È meglio definire tutte le rotte nel Global.asax che definire separatamente nelle aree?

1

Sto lavorando a un progetto MVC 4 che fungerà da livello API di un'applicazione più grande.

Gli sviluppatori che mi hanno preceduto hanno impostato Areas distinto per separare richieste API differenti (i.e Search , Customers , Products e così via).

Sto notando che ogni Area ha classi di registrazione Area separate che definiscono percorsi per quell'area. Tuttavia, i percorsi definiti non sono specifici per area (ad esempio {controller}/{action}/{id} potrebbe essere definito ridondante in un paio di aree).

Il mio istinto sarebbe spostare tutte queste definizioni di percorso in un posto comune come Global.asax per evitare ridondanze e collisioni, ma non sono sicuro di essere corretto in proposito.

    
posta Matt Cashatt 03.10.2012 - 18:42
fonte

2 risposte

1

La tua organizzazione del percorso dipenderà interamente da quali sono i tuoi obiettivi.

Alcune rotte sono organizzate in modo tale che gli URL risultanti aumentano l'ottimizzazione dei motori di ricerca. Altri sono progettati per essere leggibili o per essere il più corti possibile. Altre ancora sono organizzate gerarchicamente, in base alla struttura delle cartelle dell'applicazione.

In breve, non esiste "una, vera via". Questo è il motivo per cui il routing esiste in primo luogo. Se esistesse solo un modo giusto per organizzare i tuoi URL, non sarebbe necessario il meccanismo "patch-bay" fornito dal routing.

Se la tua domanda è dove inserire i percorsi, dovresti metterli dove ha più senso per te. Se le aree funzionano in modo indipendente e hanno regole di routing diverse, probabilmente ha senso che ogni area abbia i propri percorsi. Se, d'altra parte, tutte le aree usano lo stesso schema di routing, probabilmente ha senso mantenere un insieme di regole globali.

Mi risulta che ASP.NET MVC controlli le regole di routing dell'area prima , quindi se hai alcune regole specifiche per una determinata area, puoi mettere quelle regole nell'area e se nessuno di essi corrisponde, il motore di routing tornerà alle rotte globali.

    
risposta data 03.10.2012 - 19:39
fonte
2

Risposta breve: Le registrazioni delle rotte dell'area di spostamento in un luogo comune non sono necessarie, meglio tenerle in aree specifiche a cui appartengono. Puoi utilizzare l'istruzione AreaRegistration.RegisterAllAreas(); in Global.asax che esegue la registrazione.

Ho elencato e codice di esempio (per l'area Clienti) che potresti aver bisogno di dichiarare per ogni area del tuo progetto.

    public class ClientsAreaRegistration : AreaRegistration
        {
            public override string AreaName
            {
                get
                {
                    return "Clients";
                }
            }



     public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Clients_default",
                "Clients/{controller}/{action}/{*id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
}
    
risposta data 03.10.2012 - 19:58
fonte

Leggi altre domande sui tag