एक एक्सेप्शन फिल्टर तब निष्पादित होता है जब एक कंट्रोलर मेथड कोई अनहैंडल्ड एक्सेप्शन फेंकता है जो HttpResponseException एक्सेप्शन नहीं है। HttpResponseException प्रकार एक विशेष मामला है, क्योंकि यह विशेष रूप से HTTP रिस्पॉन्स लौटाने के लिए डिज़ाइन किया गया है।
एक्सेप्शन फिल्टर्स System.Web.Http.Filters.IExceptionFilter इंटरफ़ेस को इम्प्लीमेंट करते हैं। एक्सेप्शन फिल्टर लिखने का सबसे सरल तरीका System.Web.Http.Filters.ExceptionFilterAttribute क्लास से डेराइव करना और OnException मेथड को ओवरराइड करना है।
नीचे एक फिल्टर है जो NotFiniteNumberException एक्सेप्शन को HTTP स्टेटस कोड 416, Requested Range Not Satisfiable में बदल देता है।
ExceptionFilterAttribute
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 students = new List
{
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 को निम्नलिखित दृष्टिकोणों में से किसी एक द्वारा पंजीकृत किया जा सकता है।
1. एक्शन को एक्सेप्शन फिल्टर से सजाएं
[Exception]
public IHttpActionResult Get(int id)
{
return Ok();
}
2. कंट्रोलर को एक्सेप्शन फिल्टर से सजाएं
[Exception]
public class StudentController : ApiController
{
public IHttpActionResult Get(int id)
{
return Ok();
}
}
3. WebApiConfig.cs में वैश्विक स्तर पर एक्सेप्शन पंजीकृत करें
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ExceptionAttribute());
}
}