Avatar billede jtofte Nybegynder
14. januar 2009 - 14:34 Der er 3 kommentarer

Fange Exceptions

Hej

Er der en smart måde hvorpå man kan fange en bestemt exception og redirecte til en fejlside. Det jeg tænker på er noget lignende som man kan lave i web.config ved pagenotfound fejl.
Lige nu bruger jeg følgende stykke kode i global.asax.

void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        if (ex is DatabaseException)
        {
            Response.Redirect("~/databaseError.aspx");
        }

  }
men det kan hurtigt blive rimeligt rodet, hvis der er andre ufangede exceptions som jeg vil sende til en række bestemt fejlsider.
Avatar billede websmith Nybegynder
14. januar 2009 - 18:23 #1
Uden at lyde alt hellig, men ville det ikke være bedre at lave din kode, så den enten ikke kaster exceptions, eller sørge for at have try/catch der hvor du bruger koden, og er inde i scope og måske kan gøre noget ved det, fx ikke alle databasefejl er kritiske. Det kan være en timeout, og hvis det er en timeout, så kan du faktisk lave en retry osv.

Men hvis du vil have en global løsning, så kan du jo evt lave nogle app.config indstillinger, hvor du har en Exception|Url og dem har du så mange af.

Du kan så i din global.asax indlæse din web.config appSettings, og istedet for at gøre som du gør ovenfor, så kan du gøre:

dvs. din web.config kunne indeholde noget ala følgende i din appSettings:

<add key="Exceptions" Value="SqlException|/databaseerror.aspx, NullReferenceException|/criticalerror.aspx"/>


Din Application_error kunne indeholde nogenlunde følgende:

Exception ex=Server.GetLastError();
            Dictionary<string, string> errorHandling = new Dictionary<string, string>();

            string exceptionName = ex.GetType().Name;
            if(errorHandling.ContainsKey(exceptionName))
            {
                Response.Redirect(errorHandling[exceptionName);
            }
            else
            {
                Response.Redirect("/unknownerror.aspx");
            }

Du skal bare så sørge for at dictionary er fyldt op med værdierne fra web.config. Men som sagt, det er ikke en løsning jeg vil anbefale :)
Avatar billede jtofte Nybegynder
14. januar 2009 - 22:08 #2
Jeg fanger også de fleste exceptions, men de som jeg mener brugere skal gøres opmærksom på fanger jeg ikke, men som et eksempel hvis databasen er gået ned, så vil jeg gerne undgå at skulle lave fejlhåndtering hver gang jeg kalder en funktion der slår op i databasen, for resultatet vil for dette projekt være at jeg skulle redirecte brugeren til en side med et beklager skilt.

Så jeg tror godt jeg kan bruge din løsning uden det bliver noget møj :-) og den vil nemt kunne skaleres op.

Så tak for hjælpen.
Avatar billede websmith Nybegynder
14. januar 2009 - 22:41 #3
Det var så lidt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester