ตัวกรองข้อยกเว้นจะทำงานเมื่อวิธีการควบคุมส่งข้อยกเว้นที่ไม่สามารถจัดการได้ซึ่งไม่ใช่ข้อยกเว้น 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 สำหรับวิธีการดำเนินการของคอนโทรลเลอร์
ExceptionAttribute สามารถลงทะเบียนด้วยวิธีใดก็ได้ดังต่อไปนี้
-
ตกแต่ง Action ด้วยตัวกรองข้อยกเว้น
[ข้อยกเว้น] รับ IHttpActionResult สาธารณะ (int id){ Return Ok();}
-
ตกแต่งตัวควบคุมด้วยตัวกรองข้อยกเว้น
[ข้อยกเว้น] StudentController คลาสสาธารณะ:ApiController { รับ IHttpActionResult สาธารณะ (int id) { Return Ok (); }}
-
ลงทะเบียนข้อยกเว้นทั่วโลกใน WebApiConfig.cs