Cara menangani kesalahan 404 di ASP.NET Core MVC

ASP.NET Core MVC adalah mitra .NET Core dari kerangka kerja ASP.NET MVC untuk membangun aplikasi web dan API lintas platform, skalabel, dan berkinerja tinggi menggunakan pola desain Model-View-Controller. Anehnya, meskipun ASP.NET Core menyediakan banyak opsi untuk menangani kesalahan 404 dengan baik, runtime ASP.NET Core MVC tidak memanfaatkannya secara default.

Akibatnya, ketika halaman web tidak ditemukan dan kesalahan 404 dikembalikan oleh aplikasi, ASP.NET Core MVC hanya menampilkan halaman kesalahan browser generik (seperti yang ditunjukkan pada Gambar 1 di bawah). Artikel ini membahas tiga opsi di ASP.NET Core yang dapat kita gunakan untuk menangani kesalahan 404 dengan lebih baik.

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini.

Buat proyek ASP.NET Core MVC

Pertama, mari buat proyek ASP.NET Core di Visual Studio. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek ASP.NET Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Web Inti ASP.NET" dari daftar templat yang ditampilkan.
  4. Klik Next. 
  5. Di jendela "Configure your new project" yang ditampilkan berikutnya, tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.
  7. Di jendela "Buat Aplikasi Web ASP.NET Core Baru", pilih .NET Core sebagai runtime dan ASP.NET Core 3.1 (atau yang lebih baru) dari daftar drop-down di bagian atas.
  8. Pilih "Aplikasi Web (Model-View-Controller)" sebagai template proyek untuk membuat aplikasi ASP.NET Core MVC baru.
  9. Pastikan kotak centang "Aktifkan Dukungan Docker" dan "Konfigurasi untuk HTTPS" tidak dicentang karena kami tidak akan menggunakan fitur tersebut di sini.
  10. Pastikan Autentikasi disetel ke "Tanpa Autentikasi" karena kami juga tidak akan menggunakan autentikasi.
  11. Klik Buat.

Mengikuti langkah-langkah ini akan membuat proyek ASP.NET Core MVC baru di Visual Studio 2019. Kami akan menggunakan proyek ini untuk menggambarkan opsi penanganan kesalahan 404 kami di bagian selanjutnya dari artikel ini.

Saat Anda menjalankan proyek ASP.NET Core MVC yang telah kami buat di bagian sebelumnya, Anda akan melihat halaman beranda aplikasi bersama dengan pesan selamat datang seperti yang ditunjukkan pada Gambar 1 di bawah. 

Sekarang mari kita coba menjelajahi halaman web yang tidak ada. Untuk melakukan ini, ketik // localhost: 6440 / welcome di bilah alamat browser Anda saat aplikasi sedang dijalankan. Ketika mesin ASP.NET Core MVC gagal menemukan sumber daya untuk URL yang ditentukan, kesalahan 404 akan dikembalikan dan Anda akan disajikan dengan halaman kesalahan berikut. Itu tidak terlalu elegan, bukan?

Periksa Response.StatusCode di ASP.NET Core MVC

Ada beberapa cara untuk memperbaiki halaman kesalahan umum ini. Solusi sederhana adalah dengan memeriksa kode status HTTP 404 sebagai tanggapan. Jika ditemukan, Anda dapat mengalihkan kontrol ke halaman yang ada. Cuplikan kode berikut mengilustrasikan bagaimana Anda dapat menulis kode yang diperlukan dalam metode Configure pada kelas Startup untuk mengalihkan ke halaman beranda jika telah terjadi kesalahan 404.

 app.Use (async (konteks, selanjutnya) =>

    {

        menunggu next ();

        jika (konteks.Response.StatusCode == 404)

        {

            context.Request.Path = "/ Beranda";

            menunggu next ();

        }

    });

Sekarang jika Anda menjalankan aplikasi dan mencoba menelusuri URL // localhost: 6440 / selamat datang, Anda akan diarahkan ke halaman beranda aplikasi.

Kode lengkap dari metode Konfigurasi diberikan di bawah ini untuk referensi Anda.

public void Configure (aplikasi IApplicationBuilder, IWebHostEnvironment env)

        {

            if (env.IsDevelopment ())

            {

                app.UseDeveloperExceptionPage ();

            }

            lain

            {

                app.UseExceptionHandler ("/ Home / Error");

            }

            app.Use (async (konteks, selanjutnya) =>

            {

                menunggu next ();

                jika (konteks.Response.StatusCode == 404)

                {

                    context.Request.Path = "/ Beranda";

                    menunggu next ();

                }

            });

            app.UseStaticFiles ();

            app.UseRouting ();

            app.UseAuthorization ();

            app.UseEndpoints (titik akhir =>

            {

                endpoints.MapControllerRoute (

                    nama: "default",

                    pola: "{controller = Home} / {action = Index} / {id?}");

            });

        }

Gunakan middleware UseStatusCodePages di ASP.NET Core MVC

Solusi kedua untuk menangani kesalahan 404 di ASP.NET Core adalah dengan menggunakan middleware UseStatusCodePages bawaan. Cuplikan kode berikut menunjukkan bagaimana Anda dapat mengimplementasikan StatusCodePages dalam metode Configure pada kelas Startup.

public void Configure (aplikasi IApplicationBuilder, IWebHostEnvironment env)

        {

            app.UseStatusCodePages ();

            // Kode lain

        }

Sekarang ketika Anda menjalankan aplikasi dan menelusuri ke sumber daya yang tidak ada, hasilnya akan mirip dengan Gambar 3.

Gunakan middleware UseStatusCodePagesWithReExecute di ASP.NET Core MVC

Anda dapat memanfaatkan middleware UseStatusCodePagesWithReExecute untuk menangani kode status tidak berhasil jika proses pembuatan respons belum dimulai. Oleh karena itu middleware ini tidak akan menangani kesalahan kode status HTTP 404 - sebaliknya, ketika kesalahan 404 terjadi, kontrol akan diteruskan ke tindakan pengontrol lain untuk menangani kesalahan tersebut.

Cuplikan kode berikut mengilustrasikan bagaimana Anda dapat menggunakan middleware ini untuk mengarahkan ke metode tindakan lain.

app.UseStatusCodePagesWithReExecute ("/ Home / HandleError / {0}");

Seperti inilah metode tindakannya.

[Rute ("/ Home / HandleError / {code: int}")]

publik IActionResult HandleError (kode int)

{

   ViewData ["ErrorMessage"] = $ "Terjadi kesalahan. ErrorCode adalah: {code}";

   kembali View ("~ / Views / Shared / HandleError.cshtml");

}

Saya serahkan kepada Anda untuk membuat tampilan HandleError untuk menampilkan pesan kesalahan.

Terakhir, Anda mungkin ingin membuat tampilan khusus untuk kode kesalahan. Misalnya, Anda dapat membuat tampilan seperti Home / Error / 500.cshtml atau Home / Error / 404.cshtml. Anda kemudian dapat memeriksa kode kesalahan HTTP dan mengarahkan ke halaman kesalahan yang sesuai.

Namun cara lain untuk menangani kesalahan halaman tidak ditemukan adalah dengan menggunakan tampilan kustom dan mengatur kode kesalahan dengan tepat. Ketika kesalahan terjadi dalam aplikasi Anda, Anda dapat mengarahkan pengguna ke halaman kesalahan yang sesuai dan menampilkan pesan kesalahan khusus Anda yang menjelaskan kesalahan tersebut.

Cara melakukan lebih banyak di ASP.NET Core:

  • Cara menggunakan injeksi ketergantungan dalam tindakan filter di ASP.NET Core 3.1
  • Cara menggunakan pola opsi di ASP.NET Core
  • Cara menggunakan perutean titik akhir di ASP.NET Core 3.0 MVC
  • Cara mengekspor data ke Excel di ASP.NET Core 3.0
  • Cara menggunakan LoggerMessage di ASP.NET Core 3.0
  • Cara mengirim email di ASP.NET Core
  • Cara memasukkan data ke SQL Server di ASP.NET Core
  • Cara menjadwalkan pekerjaan menggunakan Quartz.NET di ASP.NET Core
  • Cara mengembalikan data dari ASP.NET Core Web API
  • Cara memformat data respons di ASP.NET Core
  • Cara menggunakan ASP.NET Core Web API menggunakan RestSharp
  • Cara melakukan operasi asinkron menggunakan Dapper
  • Cara menggunakan tanda fitur di ASP.NET Core
  • Cara menggunakan atribut FromServices di ASP.NET Core
  • Cara bekerja dengan cookie di ASP.NET Core
  • Cara bekerja dengan file statis di ASP.NET Core
  • Cara menggunakan URL Rewriting Middleware di ASP.NET Core
  • Cara menerapkan pembatasan laju di ASP.NET Core
  • Cara menggunakan Azure Application Insights di ASP.NET Core
  • Menggunakan fitur NLog lanjutan di ASP.NET Core
  • Bagaimana menangani kesalahan di ASP.NET Web API
  • Bagaimana menerapkan penanganan pengecualian global di ASP.NET Core MVC
  • Bagaimana menangani nilai null di ASP.NET Core MVC
  • Versi lanjutan dalam ASP.NET Core Web API
  • Cara bekerja dengan layanan pekerja di ASP.NET Core
  • Cara menggunakan API Perlindungan Data di ASP.NET Core
  • Cara menggunakan middleware bersyarat di ASP.NET Core
  • Cara bekerja dengan status sesi di ASP.NET Core
  • Cara menulis pengontrol yang efisien di ASP.NET Core