Ho un sito con una struttura di percorso "generale" e un'area aggiuntiva "Traduci". Così al livello più alto, hai qualcosa di simile:Routing ASP.NET MVC: tutto sembra corrispondere al modello di percorso corretto, ma non funziona
- /
- /Chi ("generico")
- /Tradurre (area)
All'interno dell'area Tradurre, ho:
- /Tradurre/Word (WordController, azione Index)
- /Tradurre/Word/Aggiungi (WordControll ehm, Aggiungi azione)
- /Tradurre/Word/Migliorare (WordController, migliorare l'azione)
Tutti questi lavori.
Tuttavia, non appena aggiungo un ulteriore controller alla struttura esistente, ad es. Definizione ...
- /Tradurre/Definizione (azione DefinitionController, Index)
- /Tradurre/Definizione/Aggiungi (DefinitionController, Aggiungi azione)
o di pronuncia ...
- /Translate/Pronuncia (PronunciationController, azione Index)
- /Translate/Pronuncia/Aggiungi (PronunciaController, Aggiungi acti on)
Tutto quello che ottiene è un 404.
configurazione del routing della mia zona è qui sotto:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Translate_direct",
"Translate/{controller}/{action}",
new { action = "Index", controller = "Default", }
);
context.MapRoute(
"Translate_default",
"Translate/{toLanguageCode}/{query}/{fromLanguageCode}/{controller}/{section}/{action}/{id}",
new { action = "Index", controller="Default", id = UrlParameter.Optional, section=UrlParameter.Optional }
);
}
Ho installato Phil Haack's RouteDebugger ed ho ottenuto il seguente risultato:
Quindi sembra corrispondere al controller e all'azione, ma ottengo solo un 404.
Per completezza e la garanzia, la mia struttura dei file "MVC" è anche mostrato:
che sto chiaramente manca qualcosa di ovvio, ma non è sicuro che cosa ...?
Aggiornamento:
Sembra miei spazi dei nomi sono coinvolti in qualche modo.
La mia classe TranslateAreaRegistration aveva lo spazio dei nomi Taggloo.Web.Client.Areas.Tradurre ma il mio PronunciationController aveva uno spazio dei nomi di * Taggloo.Web. ** MVC. ** * Client.Areas.Translate.Controllers
Sembra che un errore nel mio namespacing che ha causato i due di essere diversi (la TranslateAreRegistration classe dovrebbe essere nello spazio dei nomi Taggloo.Web.Mvc.Client.Areas.Translate). Ho provato a renderli entrambi Taggloo.Web.Mvc .... ma questo non ha funzionato. Ho impostato invadentemente entrambi su Taggloo.Web.Client ... e ora funziona.
Quindi non una soluzione, una soluzione, e nonostante ci si guardi attorno, non sono ancora il più saggio del perché.
Ciao, Tutto ciò che si desidera è avere lo stesso spazio dei nomi su tutti i controller. Entrambi i controller si trovano in cartelle diverse, ad esempio Log ed Errore. Tutto sembra funzionare con me ad es. 'codice namespace Web.Controllers { classe LogController pubblico: controller { }} namespace Web.Controllers { classe ErrorController pubblico: controller { }} ' –
Ah, grazie @NipunAmbastha . Sembra che abbia perso uno dei miei controllori. –
Felice, posso aiutarti :) –