MVC URL formattazione / design

3

Nel refactoring di molti codici MVC, ho riscontrato un problema con la mia progettazione di URL. Ad esempio, supponiamo di avere un oggetto Venue

public class Venue 
{
    public long ID { get; set; }
    public List<Event> Events { get; set; }
}

e un Event oggetto

public class Event
{
    public long ID { get; set; }
    public Venue Venue { get; set; }
}

Quindi la mia configurazione iniziale prevedeva l'impostazione di un'azione in EventController come

public ActionResult List (long? ID) // http://example.org/API/Events/List/12

dove ID ha specificato Venue, quindi restituirebbe un elenco di eventi per quella sede. Se non viene specificato un ID , viene restituito un elenco di tutti gli eventi . Ciò si traduce in un URL confuso, perché il parametro ID è ambiguo e fuorviante.

Poi ho pensato di cambiarlo in

public ActionResult List (long? VenueID) // http://example.org/API/Events/List?VenueID=12

che ha molto più senso ed è più chiaro.

Esiste un URL ancora più pulito se l'azione è stata spostata su VenueController e impostata come

public ActionResult Events (long? ID) // http://example.org/API/Venue/12/Events

dato che ID indicherà chiaramente Venue ID . Il problema con questo URL è che si tratta principalmente di oggetti Event in VenueController , il che sembra sbagliato.

Mi sono orientato verso la prima opzione ( http://example.org/API/Events/List?VenueID=12 ) perché, anche se l'altra opzione è più pulita, sembra che dovrei mantenere le pagine Event (mentre visualizzo questa pagina Elenco come più correlata alla% oggettoEvent) in EventController . Qualche consiglio?

    
posta gwely 06.05.2013 - 17:26
fonte

1 risposta

3

La tua migliore risposta sarà: Decidi quale vuoi vuoi che assomigli, quindi modifica il routing in modo che corrisponda.

È possibile personalizzare il modo in cui il motore di routing elabora gli URL. Vedi qui per esempio. Il nostro sito web utilizza MVC, ma non saresti in grado di dirlo dagli URL.

Nel tuo caso specifico, ti suggerirei di creare un percorso che cerchi il modello "Venue/{id}/Events" e lo instradi al controller Event .

    
risposta data 06.05.2013 - 17:51
fonte

Leggi altre domande sui tag