Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เราจะสร้างตัวกรองข้อยกเว้นเพื่อจัดการกับข้อยกเว้นที่ไม่สามารถจัดการใน C#ASP.NET WebAPI ได้อย่างไร


ตัวกรองข้อยกเว้นจะทำงานเมื่อวิธีการควบคุมส่งข้อยกเว้นที่ไม่สามารถจัดการได้ซึ่งไม่ใช่ข้อยกเว้น HttpResponseException ประเภท HttpResponseException เป็นกรณีพิเศษ เนื่องจากได้รับการออกแบบมาโดยเฉพาะเพื่อส่งคืนการตอบกลับ HTTP

ตัวกรองข้อยกเว้นใช้อินเทอร์เฟซ System.Web.Http.Filters.IExceptionFilter วิธีที่ง่ายที่สุดในการเขียนตัวกรองข้อยกเว้นคือการได้รับมาจากคลาส System.Web.Http.Filters.ExceptionFilterAttribute และแทนที่เมธอด OnException

ด้านล่างนี้คือตัวกรองที่แปลงข้อยกเว้น NotFiniteNumberException เป็นรหัสสถานะ HTTP 416 ช่วงที่ร้องขอไม่พอใจ .

ExceptionFilterAttribute

ตัวอย่าง

ใช้ System;ใช้ System.Net;ใช้ System.Net.Http;ใช้ System.Web.Http.Filters;namespace DemoWebApplication.Controllers{ ExceptionAttribute คลาสสาธารณะ:ExceptionFilterAttribute{ การแทนที่สาธารณะเป็นโมฆะ OnException (บริบท HttpActionExecutedContext){ ถ้า (บริบท) ข้อยกเว้นคือ NotFiniteNumberException) {context.Response =HttpResponseMessage ใหม่ (HttpStatusCode.RequestedRangeNotSatisfiable); } } }}

วิธีการดำเนินการของตัวควบคุม

ตัวอย่าง

ใช้ DemoWebApplication.Models;ใช้ระบบ;โดยใช้ System.Collections.Generic;ใช้ System.Linq;ใช้ System.Web.Http;namespace DemoWebApplication.Controllers{ [ข้อยกเว้น] ชั้นเรียนสาธารณะ StudentController :ApiController{ รายชื่อนักเรียน <นักเรียน> =new List{ new Student{ Id =1, Name ="Mark" } นักเรียนใหม่{ Id =2, Name ="John" } }; รับนักเรียนสาธารณะ (int id){ if(id <=0){ throw new NotFiniteNumberException("The Id is not valid"); } var studentForId =นักเรียน FirstOrDefault(x => x.Id ==id); ส่งคืนนักเรียนForId; } }}

ให้เราทดสอบ ExceptionAttribute ด้านบนโดยส่ง id =0 สำหรับวิธีการดำเนินการของคอนโทรลเลอร์

เราจะสร้างตัวกรองข้อยกเว้นเพื่อจัดการกับข้อยกเว้นที่ไม่สามารถจัดการใน C#ASP.NET WebAPI ได้อย่างไร

ExceptionAttribute สามารถลงทะเบียนด้วยวิธีใดก็ได้ดังต่อไปนี้

  • ตกแต่ง Action ด้วยตัวกรองข้อยกเว้น

[ข้อยกเว้น] รับ IHttpActionResult สาธารณะ (int id){ Return Ok();}
  • ตกแต่งตัวควบคุมด้วยตัวกรองข้อยกเว้น

[ข้อยกเว้น] StudentController คลาสสาธารณะ:ApiController { รับ IHttpActionResult สาธารณะ (int id) { Return Ok (); }}
  • ลงทะเบียนข้อยกเว้นทั่วโลกใน WebApiConfig.cs

<ก่อนหน้า> WebApiConfig คลาสสแตติกสาธารณะ { การลงทะเบียนโมฆะสแตติกสาธารณะ (การกำหนดค่า HttpConfiguration) { config.Filters.Add ( ExceptionAttribute ใหม่ ()); }}