Thay đổi có thể gây lỗi: Exception diagnostics bị chặn khi IExceptionHandler.TryHandleAsync trả về true
Middleware (phần mềm trung gian) xử lý ngoại lệ của ASP.NET Core mặc định không còn ghi lại diagnostics (chẩn đoán) cho các ngoại lệ được xử lý bởi IExceptionHandler.
Phiên bản được giới thiệu
.NET 10 Preview 7
Hành vi trước đây
Trước đây, middleware xử lý ngoại lệ ghi lại diagnostics về các ngoại lệ được xử lý bởi IExceptionHandler.
Các exception diagnostics bao gồm:
- Ghi log
UnhandledExceptionvào ILogger. - Ghi sự kiện
Microsoft.AspNetCore.Diagnostics.HandledExceptionvào Microsoft.Extensions.Logging.EventSource. - Thêm tag
error.typevào metrichttp.server.request.duration.
Hành vi mới
Bắt đầu từ .NET 10, nếu IExceptionHandler.TryHandleAsync trả về true, exception diagnostics mặc định sẽ không còn được ghi lại.
Loại thay đổi có thể gây lỗi
Đây là một thay đổi hành vi (behavioral change).
Lý do thay đổi
Người dùng ASP.NET Core đã phản hồi rằng hành vi trước đây không mong muốn. Implementation (triển khai) IExceptionHandler của họ báo cáo rằng ngoại lệ đã được xử lý, nhưng middleware xử lý lỗi vẫn ghi lại lỗi trong telemetry (dữ liệu đo lường) của ứng dụng.
ASP.NET Core hiện tuân theo hành vi mà người dùng mong đợi bằng cách chặn diagnostics khi IExceptionHandler xử lý ngoại lệ. Các tùy chọn cấu hình cũng có sẵn để tùy chỉnh hành vi exception diagnostics nếu cần.
Hành động được khuyến nghị
Nếu bạn muốn các ngoại lệ đã được xử lý tiếp tục ghi lại telemetry, bạn có thể sử dụng tùy chọn mới ExceptionHandlerOptions.SuppressDiagnosticsCallback:
app.UseExceptionHandler(new ExceptionHandlerOptions
{
SuppressDiagnosticsCallback = context => false;
});context được truyền vào callback bao gồm thông tin về ngoại lệ, request (yêu cầu), và liệu ngoại lệ có được xử lý hay không. Callback trả về false để chỉ ra rằng diagnostics không nên bị chặn, từ đó khôi phục hành vi trước đây.