Domanda

Vorrei impostare una route per un controller che ha le normali operazioni CRUD, ma vorrei che l'azione Dettagli non mostrasse "Dettagli" nell'URL. Stackoverflow sembra avere questo tipo di routing configurato:

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

Usando questa analogia, i miei percorsi attualmente sembrano:

http://stackoverflow.com/questions/Details/999999/

Aggiungendo il seguente percorso sono stato in grado di rimuovere Dettagli :

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" });

Tuttavia, tirando su altre azioni sul controller (ad esempio / questions / new per questo esempio) si lamenta che l'id non può essere analizzato.

Esiste un modo per impostare i percorsi in modo che non sia necessario immettere manualmente tutte le altre azioni (MapRoute " items / create " ;, " items / delete " ;, ecc.) manualmente nel Global. asax.cs? In sostanza, vorrei avere un secondo percorso come:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

... e fai in modo che il motore di routing utilizzi la route Q1 se {id} corrisponde a un numero intero e {action} se è una stringa. È possibile?

È stato utile?

Soluzione

Se si imposta un vincolo di route sul primo in modo che il campo ID possa essere solo un numero intero, credo che qualsiasi altra azione passerà all'impostazione predefinita.

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

Qualsiasi altra cosa dovrebbe essere gestita dalla rotta predefinita. Quindi "domande / 3553" lo colpirei ma " domande / chiedi " non corrisponderebbe. Probabilmente vorrai inserire prima il percorso più specifico nel tuo file Global.asax.cs.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top