Posso vedere l'equivoco. Si desidera eseguire la cosa MVC
e redirect
su un'azione del controller.
Ma defaultRedirect
è di per sé una convenzione Web Form
e pertanto limitata. Nel momento in cui si reindirizza ad un altro controller, si perde il vostro HttpContext
, e quindi perdere la HandleErrorInfo
oggetto
tuo [HandleError]
attributo richiede un View
per dirigere il suo messaggio di errore. Seguendo il tuo esempio sopra, suppongo tu abbia una cartella Views/Error
per il tuo ErrorController
, e in essa hai una vista Index
. Se si vuole il vostro filtro di contesto per inviare un oggetto HandleErrorInfo
a quella vista,
Prova questa sintassi:
[HandleError(View="~/Views/Error/Index")]
Public class HomeController : Controller
Ma per quanto riguarda la registrazione?!?!?
ho il sospetto la vostra intenzione è più che visualizzare stack errori per gli utenti. In realtà, sospetto che tu non abbia affatto tale intenzione. Sospetto che il tuo vero scopo sia quello di registrare il tuo errore (probabilmente in db) e di mostrare un messaggio blando al tuo utente.
Quello che ho spiegato fino ad ora è stato "quale è il migliore [modo per] mostrare le eccezioni non gestite nella mia vista". L'attributo [HandleError]
è buono per quello.
Ma quando si vuole passare alla fase successiva (registrazione di errore) si dispone di alcune opzioni:
1) Override your base controller's On Exception method; crea il tuo Controller
ereditato dalla classe MVC Controller ma sostituisci il metodo On Exception. Questo approccio può essere utilizzato insieme all'attributo [HandleError]
2) Create a custom exception handler Creare il proprio gestore di eccezioni che registra l'errore. Il gestore delle eccezioni può quindi chiamare una vista di scelta o può lavorare in congiunzione con [HandleError(order=2)]
poiché gli attributi del filtro possono accettare un argomento ordine che applica la precedenza.
Nitin Sawant chiede cosa una vista di errore sarà simile. The
@model System.Web.Mvc.HandleErrorInfo
<h2>Exception details</h2>
<p> Controller: @Model.ControllerName </p>
<p> Action: @Model.ActionName </p>
<p> Exception: @Model.Exception </p>
customError perde tutto il riferimento all'errore. –
possibile duplicato di [Come gestisco le eccezioni non rilevate in un'applicazione ASP.NET MVC 3?] (Http://stackoverflow.com/questions/6596648/how-do-i-handle-uncaught-exceptions-in-an- asp-net-mvc-3-application) –
Mentre customError reindirizza sta facendo una nuova richiesta http in modo da perdere tutti i precedenti dati di risposta. Quello di cui hai bisogno è impostare la modalità redirectMode su ResponseRewrite in modo da non fare una nuova richiesta. –