Trong chương này, chúng tôi sẽ thảo luận về các trường hợp ngoại lệ và xử lý lỗi. Khi xảy ra lỗi trong ứng dụng ASP.NET Core của bạn, bạn có thể xử lý chúng theo nhiều cách khác nhau. Hãy cho chúng tôi xem một phần bổ sung của phần mềm trung gian có sẵn thông qua gói chẩn đoán. Phần trung gian này sẽ giúp chúng tôi xử lý lỗi.
Để mô phỏng một lỗi, chúng ta hãy truy cập app.Run và xem ứng dụng hoạt động như thế nào nếu chúng ta chỉ ném một ngoại lệ mỗi khi chúng ta nhấn vào phần mềm trung gian này.
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; namespace FirstAppDemo { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("AppSettings.json"); Configuration = builder.Build(); } public IConfiguration Configuration { get; set; } // This method gets called by the runtime. // Use this method to add services to the container. // For more information on how to configure your application, // visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseRuntimeInfoPage(); app.Run(async (context) => { throw new System.Exception("Throw Exception"); var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); } }
Nó sẽ chỉ ném một ngoại lệ với một thông điệp rất chung chung. Lưu trang Startup.cs và chạy ứng dụng của bạn.
Bạn sẽ thấy rằng chúng tôi không thể tải tài nguyên này. Có lỗi HTTP 500, lỗi máy chủ nội bộ và điều đó không hữu ích lắm. Nó có thể là tốt đẹp để có được một số thông tin ngoại lệ.
Chúng ta hãy thêm một phần mềm trung gian khác, đó là UseDeveloperExceptionPage.
// This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseDeveloperExceptionPage(); app.UseRuntimeInfoPage(); app.Run(async (context) => { throw new System.Exception("Throw Exception"); var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
Phần mềm trung gian này hơi khác một chút so với các phần mềm trung gian khác, các phần mềm trung gian khác thường nhìn vào yêu cầu đến và đưa ra một số quyết định về yêu cầu đó.
UseDeveloperExceptionPage không quan tâm lắm đến các yêu cầu đến vì nó thực hiện những gì xảy ra sau đó trong đường ống.
Nó sẽ chỉ gọi vào phần tiếp theo của phần mềm trung gian, nhưng sau đó sẽ chờ xem liệu sau này trong đường ống có tạo ra ngoại lệ hay không và nếu có ngoại lệ, phần trung gian này sẽ cung cấp cho bạn một trang lỗi với một số thông tin bổ sung về ngoại lệ đó.
Bây giờ chúng ta hãy chạy lại ứng dụng. Nó sẽ tạo ra một đầu ra như trong ảnh chụp màn hình sau đây.
Bây giờ bạn sẽ thấy một số thông tin mà bạn mong đợi nếu có lỗi trong quá trình phát triển. Bạn cũng sẽ nhận được một dấu vết ngăn xếp và bạn có thể thấy rằng có một ngoại lệ chưa được xử lý được ném trên dòng 37 của Startup.cs.
Bạn cũng có thể xem chi tiết ngoại lệ thô và tất cả thông tin này có thể rất hữu ích cho nhà phát triển. Trên thực tế, có lẽ chúng tôi chỉ muốn hiển thị thông tin này khi nhà phát triển đang chạy ứng dụng.