Penso che MVC, ASP e il tuo framework di gestione delle eccezioni / registrazione preferito siano in grado di gestire i tuoi obiettivi in modo abbastanza preciso. ELMAH e Enterprise Library forniscono sia la gestione delle eccezioni che la gestione delle eccezioni, quindi scegli il tuo preferito. Non ho intenzione di addentrarmi nei pro e contro di ciascuno.
NOTA: non puoi visualizzare una pagina di errore amichevole E restituire un HTTP 404 o 500 come suggerisce la tua domanda. Quando si restituisce una pagina di errore descrittivo, il codice HTTP restituito al browser sarà 302. Si tratta di un reindirizzamento alla pagina di errore descrittivo.
Pagine di errore descrittive
Sembra che tu possa raggiungere i tuoi obiettivi con le buone impostazioni web.config che fanno parte di ASP.net da un po 'di tempo. Si menziona la visualizzazione delle informazioni di debug in dev e la visualizzazione di pagine amichevoli in produzione. Puoi usare la sezione degli errori personalizzati di web.config per questo (Imposta CustomErrors="Off" per mostrare le informazioni di debug). Presumo che tu abbia familiarità con l'attributo CustomErrors, se non leggi questo:
link
Se è necessaria una maggiore granularità del controllo su quali visualizzazioni di errore vengono visualizzate, utilizzare l'attributo HandleError di MVC. In questo modo puoi scegliere diverse visualizzazioni di errore per ogni Azione / Controller.
link
Registrazione delle eccezioni
Sembra che tu voglia rispondere a tutte le tue eccezioni allo stesso modo ("registra gli errori e mandali via email all'amministratore in produzione"). In tal caso, l'opzione più semplice è aggiungere il codice a
Application_Error (oggetto mittente, EventArgs e)
nel tuo global.asax. È qui che puoi passare al framework di registrazione prescelto.
Se desideri un maggiore controllo sulla registrazione / gestione delle eccezioni, puoi eseguire la sottoclasse di HandleErrorAttribute e override
OnException(System.Web.Mvc.ExceptionContext filterContext)
questo è un altro posto in cui puoi passare al framework di registrazione prescelto.
link
Questo ti dà più controllo della tecnica Application_Error sopra menzionata.
In generale MVC offre una granularità di controllo su come gestire gli errori.
Se non hai bisogno di questo controllo, puoi ricorrere ai sistemi ASP.net per fare cose come la definizione di pagine di errore sul tuo web.config.