Toon posts:

[asp.net] mooie foutafvanging

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil op mijn site/applicatie een mooie foutafvanging doen.

Nu is het natuurlijk mogelijk om in web.config een pagina aan te wijzen die als errorpagina dient, en waar gebruikers heen gestuurd worden in het geval van een fout. Maar eigenlijk vind ik dit niet altijd even mooi. Bijvoorbeeld bij het invoeren van gegevens, wil ik graag een kleine foutmelding tonen boven/onder mijn datagrid. Nou kan ik dat natuurlijk doen door boven/onder een literal te plaatsen en die in het geval van een fout (catch ex as exception ofzo) te vullen met een foutmelding. Persoonlijk vind ik dit wel mooier. Maar nu komt mijn punt, ik wil deze tekst natuurlijk niet hard in de code zetten, en eigenlijk wil ik 'm zelfs aanpasbaar maken voor gebruikers (in een soort beheer module). Nu is het natuurlijk niet zo lastig om zo'n tekstje in de database te zetten en gebruikers dit laten aanpassen, maar wanneer er dan een databasefout optreedt kan de melding dus ook niet getoond worden. Hoe kan ik dit oplossen? Ik had al iets gelezen over application variabelen in een global.asa bestand, maar dat leek me niet de allerfijnste oplossing.

Mijn vraag ik dus, hoe kan ik zo'n tekstje het beste opslaan (en waar), maar ook: hoe doen andere ontwikkelaars dit? maken jullie wel een standaard errorpagina? en hoe kunnen gebruikers dan weer terug naar hun vorige pagina (back knop wil bij mij nogal eens de de pagina stuk maken ivm viewstate, sessions en if-statements die ik geef bijhet laden van een pagina). Graag jullie meningen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 06-05 15:36
Je hebt verschillende manieren om foutafhandeling te doen, en iedere situatie heeft zo z'n eigen manier;

je hebt de ValidatorControls waarmee je de input kunt testen van controls, je hebt de gewone 'exception handling', je hebt hetgeen wat jij al zegt, je hebt de Application_Error events, etc...

Voor jouw 'aanpasbare' strings, kan je misschien eens kijken naar resource - files.

[ Voor 13% gewijzigd door whoami op 14-06-2005 10:39 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:07

gorgi_19

Kruimeltjes zijn weer op :9

global.asa == ASP; daar moet je ASP.Net niet mee vergelijken

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
whoami schreef op dinsdag 14 juni 2005 @ 10:38:
Je hebt verschillende manieren om foutafhandeling te doen, en iedere situatie heeft zo z'n eigen manier;

je hebt de ValidatorControls waarmee je de input kunt testen van controls, je hebt de gewone 'exception handling', je hebt hetgeen wat jij al zegt, je hebt de Application_Error events, etc...

Voor jouw 'aanpasbare' strings, kan je misschien eens kijken naar resource - files.
Ok, ik heb even gekeken naar resource files, dit ziet er opzich wel uit wat ik wil, maar ik begrijp uit verschillende teksten dat het vrij complex is. Wanneer zo'n tekst aangepast moet worden moet een aparte applicatie worden gestart, daarmee een resourcefile aangemaakt en die over de vorige versie heen gesaved. Het is opzich wel wat ik wil, maar ik denk dat het niet helemaal noob-proof is.

Verder begrijp ik uit je verhaal dat je dus error-handling apart moet doen voor validatie, exceptions, application_errors etc... das wel jammer, maar opzich ook wel weer te verwachten. Hoe doen jullie nou zoiets? nog tips?
gorgi_19 schreef op dinsdag 14 juni 2005 @ 10:50:
global.asa == ASP; daar moet je ASP.Net niet mee vergelijken
Ah, dan heb ik een verkeerd artikel gelezen, ik vond het al een beetje verwarrend wat er stond... Bedankt voor de heads-up.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:07

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op dinsdag 14 juni 2005 @ 11:13:
Ok, ik heb even gekeken naar resource files, dit ziet er opzich wel uit wat ik wil, maar ik begrijp uit verschillende teksten dat het vrij complex is. Wanneer zo'n tekst aangepast moet worden moet een aparte applicatie worden gestart, daarmee een resourcefile aangemaakt en die over de vorige versie heen gesaved. Het is opzich wel wat ik wil, maar ik denk dat het niet helemaal noob-proof is.
Kijk anders eens naar de methodiek die gebruikt wordt in asp.net forums, nu communityserver.
Verder begrijp ik uit je verhaal dat je dus error-handling apart moet doen voor validatie, exceptions, application_errors etc... das wel jammer, maar opzich ook wel weer te verwachten. Hoe doen jullie nou zoiets? nog tips?
:? Welke fouten heb je het over? Standaard fouten (verkeerd ingevuld) heb je validators voor. Onverwachte situaties heb je exceptions voor, welke afgevangen kunnen worden in Applicat_Error

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Waarom maak je in je web.config niet een section aan waarin je alle meldingen zet? Dan is het niet te wijzigen door de gebruikers, maar wel makkelijk aan te passen door een systeembeheerder oid.

code:
1
2
3
4
5
6
7
8
9
10
11
12
<configSections>
    <sectionGroup name="MyGroup">
        <section name="MySection" type="System.Configuration.NameValueSectionHandler,System,Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </sectionGroup>
</configSections>
...
...
<MyGroup>
    <MySection>
        <add key="key1" value="Sleutelwaarde" />
    </MySection>
</MyGroup>


en dit roep je dan als volgt aan:
code:
1
2
3
NameValueCollection m_config = (NameValueCollection)System.Configuration.ConfigurationSettings.GetConfig("MyGroup/MySection");

string key = m_config.Get("key1").ToString();


de string key bevat dan de waarde Sleutelwaarde

| Life is a game (and games are fun) | homepage |


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:07

gorgi_19

Kruimeltjes zijn weer op :9

Je kan het dan beter in een apart configuratiebestand (XML) laden c.q. gebruiken en deze cachen en een cachedependancy op dit bestand leggen. Op deze manier krijg je niet een application reload voor iedere wijziging die je aanbrengt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
De oplossing met een XML bestand is een mooie oplossing. Dat is eigenlijk precies waar ik naar zoek (stom van mezelf, niet aangedacht om xml te gebruiken). Ik zal dit eens proberen te implementeren (nog niets gedaan met xml en asp.net samen eerlijk gezegd).

Maar uit jullie antwoorden begrijp ik dat jullie iets dergelijks zelf niet gebruiken voor foutafhandeling. Hebben jullie gewoon een redirect (of meerdere) in web.config en dan bijbehorende foutpagina's? Ik vraag me namelijk nog steeds af hoe anderen dit oplossen.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op dinsdag 14 juni 2005 @ 13:54:
De oplossing met een XML bestand is een mooie oplossing. Dat is eigenlijk precies waar ik naar zoek (stom van mezelf, niet aangedacht om xml te gebruiken). Ik zal dit eens proberen te implementeren (nog niets gedaan met xml en asp.net samen eerlijk gezegd).

Maar uit jullie antwoorden begrijp ik dat jullie iets dergelijks zelf niet gebruiken voor foutafhandeling. Hebben jullie gewoon een redirect (of meerdere) in web.config en dan bijbehorende foutpagina's? Ik vraag me namelijk nog steeds af hoe anderen dit oplossen.
Zowiezo probeer je zo vaak mogenlijk Exceptions te voorkomen en anders in je programma op te lossen. Voor validatie van gegevens maak ik dus ook zeker geen gebruik van exceptions.

Als er toch een Exception optreedt waar ik niks mee kan laat ik idd een aparte pagina zien waar een melding getoond wordt aan de hand van wat voor type exception het is. Als het een SqlException is geef ik bijvoorbeeld weer "Er is een probleem met de database". Als het een onbekend type Exception is dan laat ik gewoon een algemene melding zien dat er iets is mis gegaan en dat ze contact op moeten nemen met de support afdeling. Verder mail ik de exception dan gewoon door naar een mail adres waar er dan verder gekeken kan worden naar de oorzaak van de Exceptions.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • barfieldmv
  • Registratie: Maart 2004
  • Laatst online: 19-04 10:49
Ik gebruik zelf meestal meerdere fout handlers.

De eerste is op pagina/applicatie niveau. Als een pagina een unhandled exception heeft redirect ik de gebruiker naar een fout.aspx pagina + emailtje naar admin. Dit is de worst case scenario.
Hierbij gebruik ik overerving van mijn eigen web.page en de OnError methode.

De tweede is op controll niveau. Als een invulveld verkeerd word ingevuld krijgt de gebruiker hier meetsal een melding van ("Postcode invoeren als 1234MP, aub") ofzo.
Hierachter zit direct een database fout handler. Ingevulde data onjuist probeer het nog een keer als het een misformed expression sql error is (precies weet ik het niet meer).

Derde type fouten, inlog problemen of program flow errors. Ik hou zelf bij wat voor type gebruiker is en waar hij wel en niet mag komen. Dit doe ik op een eigen manier waarbij ik geen Exceptions gebruik maar alleen redirects.

Ik had zelf de foutmeldingen hardcoded neergezet omdat ik een page based content systeem opgebouwd heb. Als je het gescheiden wilt houden zou ik globale problemen in een XML bestand bewaren en specifieke invulfouten toch per pagina of per groep controlls.

Over de back page, javascript om de gebruiker een nieuwe pagina op te laten vragen en zelf de meest recente pagina redirecten helpt heel goed. maw onmogelijk maken van back knop in de meeste situaties(is meestal ook wel gewenst bij database errors, zijn meestal heel hard en je sessie state is dan toch waarschijnlijk corrupt).
Pagina: 1