Percorso MVC dove esiste il percorso

Sto cercando di creare un percorso che indichi un URL simile

http://mysite.com/tech/ 

ma ho anche una directory effettiva sotto il sito che è / tech, che contiene altre risorse statiche. Non è la mia scelta progettuale, ma sto migrando un vecchio sito in mvc e non voglio rompere un mucchio di link molto vecchi.

Il mio percorso sembra continuare a fallire, e quello che posso capire è che il server vede questa directory e sta cercando di servire il file predefinito da esso … ma nessuno viene trovato, e fallisce.

Mi piacerebbe che usasse il mio percorso e mi permettesse di mostrare il mio punto di vista. Qualche buona pratica per questo?

AGGIORNAMENTO: Ho provato a utilizzare RouteExistingFiles = true, che ha reso questo lavoro, ma poi ho avuto problemi con i file che esistevano all’interno di queste directory. (ad esempio: http://mysite.com/tech/image.jpg ). Ho iniziato ad aggiungere voci IgnoreRoute per tutti i vari tipi di file che volevo ignorati (ad esempio file .jpg ..), ma questo si è trasformato in un grande casino. Ci deve essere un modo migliore?

È necessario impostare la proprietà RouteExistingFiles dell’object RouteCollections su true. Ciò renderà il tuo routing prioritario rispetto alla posizione fisica se viene trovato uno scontro.

 routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); routes.RouteExistingFiles = true; 

Per ignorare selettivamente i file / le estensioni puoi usare:

 routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" }); 

Un altro approccio che potrebbe aiutare se non ti piace l’approccio ignoreRoute , è quello di estendere il ViewEngine e sovrascrivere il file esiste implementaion con le tue regole.

 public class MyViewEngine : RazorViewEngine { protected override bool FileExists(ControllerContext controllerContext, string virtualPath) { //Some Logic to check for file } } ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new CustomViewEngine());