Custom errors med ASP.NET i web.config

Feilmeldinger dukker opp av og til i ASP.NET som alle andre teknologier enten man vil eller ikke. De er kjipe å se på i tillegg til at de kan avsløre data om systemene dine som du helst vil holde for deg selv. I denne artikkelen ser vi på hvordan vi kan lage våre egne feilmeldingssider vha konfigurasjon i web.config.

ASP.NET websites og webapplikasjoner har en tilhørende web.config fil. Denne filen inneholder xml-data som beskriver hvordan din webapplikasjon er konfigurert. Denne konfigurasjonsfilen kan spesifisere innstillinger enten for hele websiden din, for en bestemt katalog eller for enklelte filer. I denne artikkelen skal vi konfigurere web.config til å håndtere feilmeldinger for hele websiden.

Vi skal kikke på en del av web.config som kalles “customErrors”. Den legges inn i <system.web> og det kan feks se slik ut:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <customErrors mode="Off" />
  </system.web>
</configuration>

I eksempelet over vil vi ikke håndtere feilmeldinger. Mens man utvikler er det jo greit å se hva som er feil mens man jobber med løsningen. I koden under er web.config satt opp til å sende brukeren til vennlige feilmeldinger.

<customErrors mode="On" defaultRedirect="/error/error.htm">
  <error statusCode="404" redirect="/error/404.htm" />
  <error statusCode="500" redirect="/error/500.htm" />
</customErrors>

I eksempelet over sender man brukeren til angitte sider avhengig av hvilken feil som dukker opp. Det er en ting som er viktig å merke seg. ASP.NET prosesserer bare forespørsler med spesifikke filendelser. Dvs at filer med endelsen .htm eller .htmleller .php (osv…) ikke blir fanget opp av web.config fordi den ikke prosesseres av ASP.NET motoren. Man kan sette opp IIS til å prosessere alle type filendelser, men det er et ytelsesspørsmål. ASP.NET prosesserer heller ikke url’er uten filendeleser (med mindre det ligger et default-dokument i mappen) som feks http://minportal.no/forum, mens http://minportal.no/forum.aspx vil fanges opp.