วิธีจัดการข้อผิดพลาด 404 ใน ASP.NET Core MVC

ASP.NET Core MVC เป็น. NET Core ที่คู่กันของเฟรมเวิร์ก ASP.NET MVC สำหรับการสร้างเว็บแอปพลิเคชันและ API ข้ามแพลตฟอร์มที่ปรับขนาดได้และมีประสิทธิภาพสูงโดยใช้รูปแบบการออกแบบ Model-View-Controller น่าแปลกที่แม้ว่า ASP.NET Core จะมีตัวเลือกมากมายสำหรับจัดการข้อผิดพลาด 404 อย่างสง่างาม แต่รันไทม์ ASP.NET Core MVC ก็ไม่ได้ใช้ประโยชน์จากข้อผิดพลาดเหล่านี้ตามค่าเริ่มต้น

ด้วยเหตุนี้เมื่อไม่พบหน้าเว็บและแอปพลิเคชันแสดงข้อผิดพลาด 404 ASP.NET Core MVC จะแสดงเฉพาะหน้าข้อผิดพลาดทั่วไปของเบราว์เซอร์ (ดังแสดงในรูปที่ 1 ด้านล่าง) บทความนี้กล่าวถึงสามตัวเลือกใน ASP.NET Core ที่เราสามารถใช้เพื่อจัดการข้อผิดพลาด 404 ได้อย่างงดงามยิ่งขึ้น

ในการทำงานกับตัวอย่างโค้ดที่ให้ไว้ในบทความนี้คุณควรติดตั้ง Visual Studio 2019 ในระบบของคุณ หากคุณยังไม่มีสำเนาคุณสามารถดาวน์โหลด Visual Studio 2019 ได้ที่นี่

สร้างโครงการ ASP.NET Core MVC

ก่อนอื่นมาสร้างโครงการ ASP.NET Core ใน Visual Studio สมมติว่ามีการติดตั้ง Visual Studio 2019 ในระบบของคุณให้ทำตามขั้นตอนที่ระบุด้านล่างเพื่อสร้างโครงการ ASP.NET Core ใหม่ใน Visual Studio

  1. เปิด Visual Studio IDE
  2. คลิกที่ "สร้างโครงการใหม่"
  3. ในหน้าต่าง“ สร้างโครงการใหม่” เลือก“ ASP.NET Core Web Application” จากรายการเทมเพลตที่แสดง
  4. คลิกถัดไป 
  5. ในหน้าต่าง "กำหนดค่าโครงการใหม่ของคุณ" ที่แสดงถัดไประบุชื่อและที่ตั้งสำหรับโครงการใหม่
  6. คลิกสร้าง
  7. ในหน้าต่าง“ Create a New ASP.NET Core Web Application” ให้เลือก. NET Core เป็นรันไทม์และ ASP.NET Core 3.1 (หรือใหม่กว่า) จากรายการดรอปดาวน์ที่ด้านบน
  8. เลือก“ Web Application (Model-View-Controller)” เป็นเทมเพลตโครงการเพื่อสร้างแอปพลิเคชัน ASP.NET Core MVC ใหม่
  9. ตรวจสอบให้แน่ใจว่าไม่มีการเลือกช่องทำเครื่องหมาย "เปิดใช้งานการสนับสนุน Docker" และ "กำหนดค่าสำหรับ HTTPS" เนื่องจากเราจะไม่ใช้คุณลักษณะเหล่านั้นที่นี่
  10. ตรวจสอบให้แน่ใจว่าการรับรองความถูกต้องถูกตั้งค่าเป็น“ ไม่มีการพิสูจน์ตัวตน” เนื่องจากเราจะไม่ใช้การพิสูจน์ตัวตนด้วย
  11. คลิกสร้าง

การทำตามขั้นตอนเหล่านี้จะสร้างโปรเจ็กต์ ASP.NET Core MVC ใหม่ใน Visual Studio 2019 เราจะใช้โปรเจ็กต์นี้เพื่อแสดงตัวเลือกการจัดการข้อผิดพลาด 404 ของเราในส่วนต่อไปของบทความนี้

เมื่อคุณดำเนินการโครงการ ASP.NET Core MVC ที่เราสร้างขึ้นในส่วนก่อนหน้านี้คุณจะเห็นโฮมเพจของแอปพลิเคชันพร้อมกับข้อความต้อนรับดังแสดงในรูปที่ 1 ด้านล่าง 

ตอนนี้เรามาลองเรียกดูหน้าเว็บที่ไม่มีอยู่ โดยพิมพ์ // localhost: 6440 / welcome ในแถบที่อยู่ของเบราว์เซอร์ของคุณในขณะที่แอปพลิเคชันกำลังทำงาน เมื่อเอ็นจิน ASP.NET Core MVC ล้มเหลวในการค้นหารีซอร์สสำหรับ URL ที่ระบุข้อผิดพลาด 404 จะถูกส่งกลับและคุณจะเห็นหน้าข้อผิดพลาดต่อไปนี้ มันไม่สวยหรูใช่มั้ย?

ตรวจสอบ Response.StatusCode ใน ASP.NET Core MVC

มีหลายวิธีที่คุณสามารถปรับปรุงได้ในหน้าข้อผิดพลาดทั่วไปนี้ วิธีแก้ไขง่ายๆคือตรวจสอบรหัสสถานะ HTTP 404 ในการตอบกลับ หากพบคุณสามารถเปลี่ยนเส้นทางการควบคุมไปยังเพจที่มีอยู่ ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่าคุณสามารถเขียนโค้ดที่จำเป็นในเมธอด Configure ของคลาส Startup เพื่อเปลี่ยนเส้นทางไปยังโฮมเพจหากเกิดข้อผิดพลาด 404

 app.Use (async (บริบทถัดไป) =>

    {

        รอต่อไป ();

        ถ้า (context.Response.StatusCode == 404)

        {

            context.Request.Path = "/ หน้าแรก";

            รอต่อไป ();

        }

    });

ตอนนี้หากคุณเรียกใช้แอปพลิเคชันและพยายามเรียกดู URL // localhost: 6440 / ยินดีต้อนรับคุณจะถูกนำไปที่โฮมเพจของแอปพลิเคชัน

รหัสทั้งหมดของวิธีการกำหนดค่ามีให้ด้านล่างสำหรับการอ้างอิงของคุณ

โมฆะสาธารณะกำหนดค่า (แอป IApplicationBuilder, IWebHostEnvironment env)

        {

            ถ้า (env.IsDevelopment ())

            {

                app.UseDeveloperExceptionPage ();

            }

            อื่น

            {

                app.UseExceptionHandler ("/ บ้าน / ข้อผิดพลาด");

            }

            app.Use (async (บริบทถัดไป) =>

            {

                รอต่อไป ();

                ถ้า (context.Response.StatusCode == 404)

                {

                    context.Request.Path = "/ หน้าแรก";

                    รอต่อไป ();

                }

            });

            app.UseStaticFiles ();

            app.UseRouting ();

            app.UseAuthorization ();

            app.UseEndpoints (จุดสิ้นสุด =>

            {

                endpoints.MapControllerRoute (

                    ชื่อ: "ค่าเริ่มต้น",

                    รูปแบบ: "{controller = Home} / {action = Index} / {id?}");

            });

        }

ใช้มิดเดิลแวร์ UseStatusCodePages ใน ASP.NET Core MVC

แนวทางที่สองสำหรับการจัดการข้อผิดพลาด 404 ใน ASP.NET Core คือการใช้มิดเดิลแวร์ UseStatusCodePages ในตัว ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่คุณสามารถใช้ StatusCodePages ในเมธอด Configure ของคลาส Startup

โมฆะสาธารณะกำหนดค่า (แอป IApplicationBuilder, IWebHostEnvironment env)

        {

            app.UseStatusCodePages ();

            // รหัสอื่น ๆ

        }

ตอนนี้เมื่อคุณเรียกใช้แอปพลิเคชันและเรียกดูทรัพยากรที่ไม่มีอยู่จริงผลลัพธ์จะคล้ายกับรูปที่ 3

ใช้ UseStatusCodePagesWithReExecute มิดเดิลแวร์ใน ASP.NET Core MVC

คุณสามารถใช้ประโยชน์จากมิดเดิลแวร์ UseStatusCodePagesWithReExecute เพื่อจัดการกับรหัสสถานะไม่สำเร็จในกรณีที่กระบวนการสร้างการตอบกลับไม่ได้เริ่มต้นขึ้น ดังนั้นมิดเดิลแวร์นี้จะไม่จัดการข้อผิดพลาดรหัสสถานะ HTTP 404 แต่เมื่อเกิดข้อผิดพลาด 404 การควบคุมจะถูกส่งไปยังการดำเนินการของคอนโทรลเลอร์อื่นเพื่อจัดการข้อผิดพลาด

ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นว่าคุณสามารถใช้มิดเดิลแวร์นี้เพื่อเปลี่ยนเส้นทางไปยังวิธีการดำเนินการอื่นได้อย่างไร

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

นี่คือลักษณะของวิธีการดำเนินการ

[เส้นทาง ("/ Home / HandleError / {code: int}")]

IActionResult HandleError สาธารณะ (รหัส int)

{

   ViewData ["ErrorMessage"] = $ "เกิดข้อผิดพลาด ErrorCode คือ: {code}";

   กลับดู ("~ / Views / Shared / HandleError.cshtml");

}

ฉันปล่อยให้คุณสร้างมุมมอง HandleError เพื่อแสดงข้อความแสดงข้อผิดพลาด

สุดท้ายคุณอาจต้องการสร้างมุมมองสำหรับรหัสข้อผิดพลาดโดยเฉพาะ ตัวอย่างเช่นคุณอาจสร้างมุมมองเช่น Home / Error / 500.cshtml หรือ Home / Error / 404.cshtml จากนั้นคุณสามารถตรวจสอบรหัสข้อผิดพลาด HTTP และเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดที่เหมาะสม

อีกวิธีหนึ่งในการจัดการหน้าไม่พบข้อผิดพลาดคือการใช้มุมมองที่กำหนดเองและตั้งค่ารหัสข้อผิดพลาดอย่างเหมาะสม เมื่อเกิดข้อผิดพลาดในแอปพลิเคชันของคุณคุณสามารถเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าข้อผิดพลาดที่เหมาะสมและแสดงข้อความแสดงข้อผิดพลาดที่กำหนดเองซึ่งอธิบายถึงข้อผิดพลาด

วิธีทำเพิ่มเติมใน ASP.NET Core:

  • วิธีใช้การฉีดการพึ่งพาในตัวกรองการดำเนินการใน ASP.NET Core 3.1
  • วิธีใช้รูปแบบตัวเลือกใน ASP.NET Core
  • วิธีใช้ endpoint Routing ใน ASP.NET Core 3.0 MVC
  • วิธีการส่งออกข้อมูลไปยัง Excel ใน ASP.NET Core 3.0
  • วิธีใช้ LoggerMessage ใน ASP.NET Core 3.0
  • วิธีส่งอีเมลใน ASP.NET Core
  • วิธีบันทึกข้อมูลไปยัง SQL Server ใน ASP.NET Core
  • วิธีกำหนดเวลางานโดยใช้ Quartz.NET ใน ASP.NET Core
  • วิธีการส่งคืนข้อมูลจาก ASP.NET Core Web API
  • วิธีจัดรูปแบบข้อมูลตอบกลับใน ASP.NET Core
  • วิธีใช้ ASP.NET Core Web API โดยใช้ RestSharp
  • วิธีดำเนินการ async โดยใช้ Dapper
  • วิธีใช้แฟล็กฟีเจอร์ใน ASP.NET Core
  • วิธีใช้แอ็ตทริบิวต์ FromServices ใน ASP.NET Core
  • วิธีทำงานกับคุกกี้ใน ASP.NET Core
  • วิธีการทำงานกับไฟล์คงที่ใน ASP.NET Core
  • วิธีใช้ URL Rewriting Middleware ใน ASP.NET Core
  • วิธีใช้การ จำกัด อัตราใน ASP.NET Core
  • วิธีใช้ Azure Application Insights ใน ASP.NET Core
  • การใช้คุณสมบัติ NLog ขั้นสูงใน ASP.NET Core
  • วิธีจัดการข้อผิดพลาดใน ASP.NET Web API
  • วิธีใช้การจัดการข้อยกเว้นส่วนกลางใน ASP.NET Core MVC
  • วิธีจัดการค่า null ใน ASP.NET Core MVC
  • การกำหนดเวอร์ชันขั้นสูงใน ASP.NET Core Web API
  • วิธีการทำงานกับบริการของผู้ปฏิบัติงานใน ASP.NET Core
  • วิธีใช้ Data Protection API ใน ASP.NET Core
  • วิธีใช้มิดเดิลแวร์แบบมีเงื่อนไขใน ASP.NET Core
  • วิธีการทำงานกับสถานะเซสชันใน ASP.NET Core
  • วิธีเขียนคอนโทรลเลอร์ที่มีประสิทธิภาพใน ASP.NET Core