Cara Mengatasi Error elmah.axd pada Aplikasi ASP.NET

Error elmah.axd pada aplikasi berbasis ASP.NET biasanya muncul ketika modul ELMAH (Error Logging Modules and Handlers) gagal merender halaman log error, menghasilkan pesan HTTP 404 Not Found, HTTP 403 Forbidden, atau konflik routing di dalam aplikasi. ELMAH adalah pustaka open-source populer untuk menangkap dan mencatat unhandled exception secara otomatis tanpa mengubah kode aplikasi secara masif.

Penyebab utama kegagalan akses elmah.axd berkisar pada kesalahan penulisan konfigurasi di dalam berkas web.config, belum terdaftarnya handler untuk IIS Integrated Pipeline, atau aturan keamanan yang menutup akses publik ke URL log error tersebut.

Tabel Penyebab Utama dan Solusi Error elmah.axd

Gejala Error Penyebab Umum Solusi Teknis
HTTP 404 Not Found Handler belum terdaftar di <system.webServer> untuk IIS versi modern. Tambahkan konfigurasi <add name="ELMAH" ... /> pada bagian handlers.
HTTP 403 Forbidden Akses jarak jauh (remote access) ke elmah.axd dibatasi oleh konfigurasi keamanan bawaan. Atur atribut allowRemoteAccess="true" atau batasi melalui <location>.
Route Conflict (ASP.NET MVC) Routing bawaan MVC menangkap ekstensi .axd sebagai bagian dari controller/action. Abaikan rute axd menggunakan routes.IgnoreRoute("{resource}.axd/{*pathInfo}").

Langkah Perbaikan Konfigurasi web.config

Pastikan berkas web.config pada proyek ASP.NET Anda memiliki konfigurasi ELMAH yang tepat. Untuk IIS 7 ke atas yang menggunakan Integrated Pipeline, konfigurasi handler wajib diletakkan di dalam blok system.webServer.

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <security allowRemoteAccess="true" />
  </elmah>

  <system.web>
    <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
    <handlers>
      <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
    <modules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
    </modules>
  </system.webServer>
</configuration>

Mengatasi Konflik Routing pada ASP.NET MVC

Jika aplikasi Anda menggunakan ASP.NET MVC, mesin routing sering kali meneruskan permintaan elmah.axd ke controller default sehingga memicu error 404. Buka berkas Global.asax.cs dan pastikan Anda mengabaikan ekstensi .axd sebelum mendaftarkan rute utama aplikasi.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Pengamanan Akses elmah.axd di Lingkungan Produksi

Membuka akses elmah.axd secara bebas di server produksi tanpa autentikasi sangat berbahaya karena siapa pun dapat melihat informasi sensitif seperti string koneksi database, struktur internal, dan data pengguna yang error. Gunakan elemen <location> di dalam web.config untuk membatasi akses hanya bagi pengguna yang telah masuk (authenticated) atau role tertentu.

<location path="elmah.axd">
  <system.web>
    <authorization>
      <allow roles="Administrator" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>