Exception Filter จะทำงานเมื่อ Controller Method โยน Exception ที่ไม่ได้จัดการ และไม่ใช่ HttpResponseException (ซึ่งถูกออกแบบมาเพื่อส่ง HTTP Response กลับโดยตรง)
Exception Filter implement interface IExceptionFilter วิธีง่ายสุดคือสืบทอดจาก ExceptionFilterAttribute และ Override เมธอด OnException
ตัวอย่าง Exception Filter
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);
}
}
}
}
การใช้งานใน Controller
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");
}
return students.FirstOrDefault(x => x.Id == id);
}
}
}
ทดสอบโดยส่ง id = 0 จะได้ HTTP 416:

วิธีการลงทะเบียน Exception Filter
- ระดับ Action:
[Exception] public IHttpActionResult Get(int id) { ... } - ระดับ Controller:
[Exception] public class StudentController : ApiController { ... } - ระดับ Global (WebApiConfig.cs):
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Filters.Add(new ExceptionAttribute()); } }