एक अपवाद फ़िल्टर निष्पादित किया जाता है जब एक नियंत्रक विधि किसी भी अनचाहे अपवाद को फेंकता है जो HttpResponseException अपवाद नहीं है। TheHttpResponseException प्रकार एक विशेष मामला है, क्योंकि इसे विशेष रूप से एक HTTP प्रतिक्रिया देने के लिए डिज़ाइन किया गया है।
अपवाद फ़िल्टर System.Web.Http.Filters.IExceptionFilter इंटरफ़ेस को लागू करते हैं। अपवाद फ़िल्टर लिखने का सबसे सरल तरीका सिस्टम से प्राप्त करना है।
नीचे एक फ़िल्टर है जो NotFiniteNumberException अपवादों को HTTP स्थिति कोड 416, अनुरोधित श्रेणी संतोषजनक नहीं में कनवर्ट करता है ।
अपवादफ़िल्टरएट्रिब्यूट -
उदाहरण
using System; using System.Net; using System.Net.Http; using System.Web.Http.Filters; namespace DemoWebApplication.Controllers{ public class ExceptionAttribute : ExceptionFilterAttribute{ public override void OnException(HttpActionExecutedContext context){ if (context.Exception is NotFiniteNumberException){ context.Response = new HttpResponseMessage(HttpStatusCode.RequestedRangeNotSatisfiable); } } } }
नियंत्रक क्रियाविधि -
उदाहरण
using DemoWebApplication.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ [Exception] public class StudentController : ApiController{ List<Student> students = new List<Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; public Student Get(int id){ if(id <= 0){ throw new NotFiniteNumberException("The Id is not valid"); } var studentForId = students.FirstOrDefault(x => x.Id == id); return studentForId; } } }
तो आइए नियंत्रक क्रिया विधि के लिए id =0 पास करके उपरोक्त ExceptionAttribute का परीक्षण करें।
ExceptionAttribute को निम्नलिखित में से किसी भी दृष्टिकोण से पंजीकृत किया जा सकता है।
-
अपवाद फ़िल्टर के साथ क्रिया को सजाएँ।
[Exception] public IHttpActionResult Get(int id){ Return Ok(); }
-
नियंत्रक को अपवाद फिल्टर से सजाएं।
[Exception] public class StudentController : ApiController{ public IHttpActionResult Get(int id){ Return Ok(); } }
-
WebApiConfig.cs में वैश्विक स्तर पर अपवाद पंजीकृत करें।
public static class WebApiConfig{ public static void Register(HttpConfiguration config){ config.Filters.Add(new ExceptionAttribute()); } }