Asp.Net MVC Własna strona błędów

0

Cześć,
Chciałbym stworzyć własną stronę błędów, ale zatrzymałem się na tym jak wyświetlić na stronie właściwość Message z Exception. Oto co mam:

Global.asax

protected void Application_Error(object sender, EventArgs e)
        {
            var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
            Exception exc = Server.GetLastError();

            //Zapis błędu do bazy
            ILogProvider log = new DefaultLogProvider(new DbContext());
            log.Exception(exc);

            //Otwarcie strony z informacją o błędzie
            Response.Redirect(urlHelper.Action("UnhandledException", "Error"));
        }
ErrorController

[Route]
[HttpGet]
[AllowAnonymous]
public ActionResult UnhandledException()
        {
            ViewBag.Error = msg; //tutaj nie wiem jak przekazać msg???
            return View();
        }

Próbowałem w Global.asax zapisać Message do sesji ale to nie działa. Jedynie co mi udało się zrobić do dodać parametr do akcji UnhandledException(string msg) i to zadziałało ale w momencie kiedy wiąsietlana jest strona z błędem w adresie strony jest widoczny cały msg co nie wygląda dobrze...

0

A przypadkiem nie ustawia się tego w Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseExceptionHandler("/Error");
}

PS.
Ja mam projekt w ASP .NET Core (RazorPages). Microsoft twierdzi, że to MVC, więc ogólny zamysł powinien być podobny lub taki sam.

0

spróbuj dodać do global.asax:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
}
0
Slepiec napisał(a):

spróbuj dodać do global.asax:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
}

Mam to dodane - inaczej nie zapisał bym błędu w bazie :)

1

Ale to Ty chcesz z Application_Error przekazać coś do kontrolera i wyświetlić na stronie? To chyba najprościej będzie przez bazę. ;)

Tak na serio, to zamiast Application_Error zaimplementuj ExceptionFilter, tam zaloguj te dane do pliku (bo jak baza nie będzie działać, to nie będziesz nawet wiedział co się stało), wstaw do TempData, a potem zrób redirect. A strona niech wczyta sobie treść z TempData, nie trzeba tego nawet przez kontroler przepuszczać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1