2009-07-01 20 views
7

Sto avendo un problema delicato (sopportare me come sono nuovo a MVC) con il tentativo di utilizzare un controller (e un percorso successivamente) con il nome PropertiesController .ASP.NET MVC Routing con un controller denominato "PropertiesController"

Credo sia perché esiste una directory (che non posso rimuovere) chiamata "Proprietà" nella mia soluzione. C'è un modo per aggirare questo?

Il setup percorso è solo un percorso semplice:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Properties", action = "List", id = "" } // Parameter defaults 
); 

e l'errore che ottengo in IIS7 quando si richiede "http://localhost/aptment2/properties/" è:

alt text

Sicuramente c'è un modo intorno a questo che non riesco a trovare? Saluti.

+0

Si sta tentando di accedere a quella vista direttamente o si sta passando per prima la pagina default.aspx (ad esempio con un F5 o Ctrl + F5)? Solo curioso di sapere se la registrazione del percorso viene aggirata, cosa che succede se la vista è impostata come pagina iniziale invece di default.aspx. – nkirkes

+0

appena masterizzato 2 ore cercando di eseguire il debug di questo, ricordarsi di farlo prima volta la prossima volta. – mxmissile

+0

Ciò che è ancora più incasinato è l'url 'properties/index '. – mxmissile

risposta

4

Dal momento che qualcun altro sta avendo lo stesso problema, sto cercando di indovinare che si sta eseguendo in una parola chiave riservata qui (immagino ClassControllers sono fuori pure).

Non è la prima volta che succede, scavando più a fondo nell'interno dell'ambiente, you can't route to Windows' reserved keywords either.

2

In esecuzione un test rapido, ottengo lo stesso comportamento. È un'opzione percorribile usare qualcosa di diverso dalle Proprietà?

+0

Preferirei non farlo se possibile, dopo tutto l'idea di MVC è che hai il controllo completo e il tuo schema di denominazione dell'URL deve essere il più pulito possibile! –

+0

Beh, una specie di. Questa è l'idea alla base del routing, non necessariamente solo MVC, ma a prescindere, MVC si basa su alcune convenzioni e che include non usare parole riservate o nomi di altre risorse. Suggerirei di cercare di bloccare ulteriormente quella definizione di percorso (aggiungerò una modifica con un suggerimento) o di creare un nome diverso per il controller. – nkirkes

+0

Ho provato a bloccare il percorso un po 'oltre e ottenere lo stesso risultato. Potresti essere SOL su questo, ma sarò curioso di vedere se c'è un modo per aggirarlo. – nkirkes

0

Non so se è un'opzione per voi, ma potreste provare a disabilitare il routing ai file esistenti.

routes.RouteExistingFiles = false; 
4

Ho una configurazione PropertiesController su un'applicazione MVC 3 configurata per utilizzare IIS Express. Non ho l'errore esatto che si fa, ma è simile (404.20 nessun documento predefinito) e sono sicuro che è per lo stesso motivo.

Non causa alcun problema nel nostro ambiente di produzione poiché pubblichiamo una build compilata dell'app e quindi non ha una cartella Proprietà.

Per aggirare il problema durante lo sviluppo locale, ho tutto il mio contenuto statico (script/css/etc ...) in una singola directory e lo ignoro accendendo allo stesso tempo RouteExistingFiles.

routes.IgnoreRoute("static/{*wildcard}"); 
    routes.RouteExistingFiles = true; 

Questo problema risolveva il problema e ora è possibile sfogliare esempio.com/properties/ senza errori.

Problemi correlati