Computer >> Máy Tính >  >> Lập trình >> C#

Làm cách nào chúng ta có thể tạo một bộ lọc ngoại lệ để xử lý các ngoại lệ không được xử lý trong C # ASP.NET WebAPI?

Một bộ lọc ngoại lệ được thực thi khi một phương thức bộ điều khiển ném bất kỳ ngoại lệ nào không phải là ngoại lệ HttpResponseException. Loại TheHttpResponseException là một trường hợp đặc biệt, vì nó được thiết kế đặc biệt để quay lại phản hồi HTTP.

Bộ lọc ngoại lệ triển khai giao diện System.Web.Http.Filters.IExceptionFilter. Cách đơn giản nhất để viết bộ lọc ngoại lệ là lấy từ lớp theSystem.Web.Http.Filters.ExceptionFilterAttribute và ghi đè phương thứcOnException.

Dưới đây là bộ lọc chuyển đổi ngoại lệ NotFiniteNumberException thành mã trạng thái HTTP 416, Phạm vi được yêu cầu không đáp ứng được .

ExceptionFilterAttribute -

Ví dụ

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);
         }
      }
   }
}

Bộ điều khiển hành động -

Ví dụ

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;
      }
   }
}

Vì vậy, hãy để chúng tôi kiểm tra ExceptionAttribute ở trên bằng cách chuyển id =0 cho phương thức hành động của bộ điều khiển.

Làm cách nào chúng ta có thể tạo một bộ lọc ngoại lệ để xử lý các ngoại lệ không được xử lý trong C # ASP.NET WebAPI?

ExceptionAttribute có thể được đăng ký bằng bất kỳ cách tiếp cận nào sau đây.

  • Trang trí Hành động với bộ lọc ngoại lệ.

[Exception]
   public IHttpActionResult Get(int id){
   Return Ok();
}
  • Trang trí Bộ điều khiển với bộ lọc ngoại lệ.

[Exception]
public class StudentController : ApiController{
   public IHttpActionResult Get(int id){
      Return Ok();
   }
}
  • Đăng ký ngoại lệ trên toàn cầu trong WebApiConfig.cs.

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.Filters.Add(new ExceptionAttribute());
   }
}