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

Làm thế nào để xử lý lỗi trong phần mềm trung gian C # Asp.net Core?

Tạo một thư mục mới có tên CustomExceptionMiddleware và một classExceptionMiddleware.cs bên trong nó.

Điều đầu tiên chúng ta cần làm là đăng ký dịch vụ IloggerManager vàRequestDelegate thông qua việc chèn phụ thuộc.

Tham số _next của loại RequestDeleagate là một đại biểu hàm có thể xử lý các yêu cầu HTTP của bạn.

Sau quá trình đăng ký, chúng tôi cần tạo phương thức InvokeAsync () .RequestDelegate không thể xử lý các yêu cầu nếu không có nó.

Người ủy quyền _next sẽ xử lý yêu cầu và hành động Nhận hành động từ bộ điều khiển của chúng tôi sẽ tạo ra phản hồi thành công. Nhưng nếu một yêu cầu không thành công (và đó là, bởi vì chúng tôi đang buộc ngoại lệ),

phần mềm trung gian của chúng tôi sẽ kích hoạt khối bắt và gọi HandleExceptionAsyncmethod.

public class ExceptionMiddleware{
   private readonly RequestDelegate _next;
   private readonly ILoggerManager _logger;
   public ExceptionMiddleware(RequestDelegate next, ILoggerManager logger){
      _logger = logger;
      _next = next;
   }
   public async Task InvokeAsync(HttpContext httpContext){
      try{
            await _next(httpContext);
      }
      catch (Exception ex){
         _logger.LogError($"Something went wrong: {ex}");
         await HandleExceptionAsync(httpContext, ex);
      }
   }
   private Task HandleExceptionAsync(HttpContext context, Exception exception){
      context.Response.ContentType = "application/json";
      context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
      return context.Response.WriteAsync(new ErrorDetails(){
         StatusCode = context.Response.StatusCode,
         Message = "Internal Server Error from the custom middleware."
      }.ToString());
   }
}

Sửa đổi lớp ExceptionMiddlewareExtensions của chúng tôi bằng một phương thức tĩnh khác -

public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder
app){
   app.UseMiddleware<ExceptionMiddleware>();
}

sử dụng phương pháp này trong phương thức Định cấu hình trong lớp Khởi động -

app.ConfigureCustomExceptionMiddleware();