สำหรับเว็บแอปพลิเคชัน ข้อผิดพลาดเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ดังนั้นเราจึงควรใช้ความระมัดระวังและให้การจัดการที่เหมาะสมสำหรับข้อผิดพลาดที่อาจเกิดขึ้น ที่จริงแล้ว กลไกการจัดการข้อผิดพลาดที่ดีถือเป็นเกณฑ์สำคัญในการวัดคุณภาพของเว็บแอปพลิเคชัน ลองนึกภาพว่าเมื่อผู้ใช้ป้อน URL ผิดในเบราว์เซอร์โดยไม่ได้ตั้งใจหรือเมื่อผู้ใช้ให้ข้อมูลบางอย่างที่ทำให้โปรแกรมเกิดข้อผิดพลาดหากเราไม่จัดการกับสถานการณ์เหล่านี้เราจะอนุญาตให้มีหน้าข้อผิดพลาด 404 หรือ 500 หรือแม้แต่ข้อผิดพลาดข้อมูลสแต็ก ปรากฏต่อหน้าผู้ใช้ ซึ่งจะทำให้ผู้ใช้บางคนกลัวอย่างแน่นอน ดังนั้นเมื่อเราพัฒนาเว็บแอปพลิเคชัน เราควรมีความเข้าใจอย่างถ่องแท้เกี่ยวกับกลไกการจัดการข้อผิดพลาด
กลับไปที่ ASP.NET และถามคำถามสองข้อเพื่อให้ทุกคนนึกถึง: ASP.NET มีกลไกการจัดการข้อผิดพลาดกี่ข้อให้เรา? หากมีการใช้กลไกการจัดการข้อผิดพลาดหลายอย่างพร้อมกัน มีลำดับความสำคัญที่แน่นอนระหว่างกลไกเหล่านั้นหรือไม่ เมื่อมีคำถามนี้ เรามาลองดูไฟล์ Web.Config ที่พบบ่อยที่สุดของเรา:
<การกำหนดค่า>
<สถานะข้อผิดพลาดรหัส = "403" เปลี่ยนเส้นทาง = "Error403.htm" / >
<สถานะข้อผิดพลาด = "404" เปลี่ยนเส้นทาง = "Error404.htm" / >
ข้อผิดพลาดแบบกำหนดเอง>
การกำหนดค่า>
เกี่ยวกับรายการการตั้งค่า
ต่อไป มาดูไฟล์อื่นที่ใช้กันทั่วไปเช่นกัน: Global.asax เมื่อพูดถึงเอกสารนี้ คุณนึกถึงอะไร? ใช่ เป็นเหตุการณ์ที่เกี่ยวข้องกับออบเจ็กต์แอปพลิเคชันเว็บหลักสองรายการ (แอปพลิเคชันและเซสชัน) ในบรรดาเหตุการณ์เหล่านี้ มีเหตุการณ์ที่เกี่ยวข้องกับข้อผิดพลาดซึ่งอยู่ในหมวดหมู่แอปพลิเคชัน - ข้อผิดพลาด และวิธีการประมวลผลเหตุการณ์ที่เกี่ยวข้องคือ Application_Error ตามชื่อที่แนะนำ วิธีการจัดการเหตุการณ์นี้จะถูกเรียกเมื่อมีข้อผิดพลาดระดับแอปพลิเคชันเกิดขึ้น ดังนั้นคุณสามารถเพิ่มโค้ดในวิธีนี้เพื่อจัดการกับข้อผิดพลาด ดังที่แสดงด้านล่าง:
protected void Application_Error(object sender, EventArgs e) {
ข้อยกเว้น objErr = Server.GetLastError().GetBaseException();
Response.Write("ข้อผิดพลาด:" + objErr.Message);
เซิร์ฟเวอร์ ClearError();
}
ที่นี่ ทุกคนควรใส่ใจกับการใช้ Server.ClearError() ในโค้ดบรรทัดสุดท้าย เพราะเหตุใดจึงควรใช้โค้ดบรรทัดนี้ จะเกิดอะไรขึ้นถ้าคุณไม่ใช้มัน? ที่นี่ฉันจะลองอีกครั้ง กลไกการจัดการข้อผิดพลาดประการที่สองซึ่งใช้วิธีจัดการเหตุการณ์ Application_Error ใน Global.asax ก็ได้เปิดตัวเช่นกัน
วิธีการจัดการข้อผิดพลาดสองวิธีข้างต้นอาจกล่าวได้ว่าเป็นสากล วิธีหนึ่งได้มาจากไฟล์การกำหนดค่าแอปพลิเคชัน และอีกวิธีหนึ่งคือวิธีการจัดการเหตุการณ์ของไฟล์ Global.asax ที่ต้องวางไว้ในไดเร็กทอรีรากของแอปพลิเคชัน สิ่งที่ตรงกันข้ามกับระดับโลกคือในท้องถิ่น ดังนั้นเราจึงสงสัยว่า: มีกลไกการจัดการข้อผิดพลาดที่นำไปใช้กับท้องถิ่น - หน้าเว็บบางหน้าหรือไม่ คำตอบคือ "ใช่" และมีสองวิธี - การใช้แอตทริบิวต์ ErrorPage และการใช้วิธีการจัดการเหตุการณ์ Page_Error สำหรับกลไกแรก คุณสามารถตั้งค่าคุณสมบัติ ErrorPage ได้เกือบตลอดเวลาเพื่อกำหนดว่าเพจใดจะถูกเปลี่ยนเส้นทางไปเมื่อมีข้อผิดพลาดเกิดขึ้นบนเพจ สำหรับกลไกที่สอง จะคล้ายกับวิธีการจัดการเหตุการณ์ Application_Error มาก ยกเว้นแต่ว่า จังหวะเวลาของการถูกกระตุ้นนั้นแตกต่างกัน ต่อไปนี้เป็นตัวอย่างสองตัวอย่าง: