Errore StructureMap quando il controller non è valido

Sto usando la mappa delle strutture come la vetrina MVC di Rob Conery e ho un AdminController e quindi per arrivarci basta digitare:

website/Admin/action 

tuttavia se mi manca scrivere il nome del controller, ho ricevuto l’errore seguente:

Dettagli eccezione: System.ArgumentNullException: il valore non può essere nullo. Nome del parametro: chiave

Si verifica l’errore su questa linea:

 Controller controller = ObjectFactory.GetInstance(controllerType) as Controller; 

Qualcuno ha qualche idea su come posso gestire questo errore o non permettere che accada del tutto e forse solo goto una pagina 404 ??

Saluti in anticipo

Il problema è che se non c’è un controller con il nome del tipo atteso (cioè se l’utente digita ” Amdin ” la class base ControllerFactory cercherà ” Amdin Controller” e non la troverà, ma chiamerà comunque il metodo overridato ). In tal caso, la variabile controllerType sarà null. Quindi puoi semplicemente controllarlo per null prima della linea che hai citato e poi (se è null):

A) Implementare una correzione ortografica come quella che suggerisce cfeduke

o B) lancia semplicemente una HttpException con il codice di stato 404 (che dovrebbe causare l’errore 404 che stai cercando).

NOTA: se esegui una correzione ortografica, dovresti probabilmente eseguire una Response.Redirect sul nuovo URL, invece di caricare semplicemente il controller giusto, in questo modo la barra degli indirizzi cambia per riflettere la correzione ortografica

Hai un paio di opzioni diverse (o se vuoi, due cose che puoi combinare per una soluzione). Per rimuovere alcuni dei potenziali problemi tra la sedia e la barra degli indirizzi, è ansible implementare una soluzione SoundEx in C # utilizzando il nuovo framework di routing per acquisire potenzialmente alcuni errori ortografici e re-indirizzarli all’URL previsto (e / o aggiungere percorsi per ciò in cui credi comuni errori di ortografia o richieste saranno). Questo, tuttavia, non è una soluzione che risolverà completamente il problema, quindi è necessario esaminare l’implementazione di pagine di errore personalizzate per l’applicazione.