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

Sự khác biệt giữa IApplicationBuilder.Use () và IApplicationBuilder.Run () C # Asp.net Core là gì?

Chúng ta có thể định cấu hình phần mềm trung gian trong phương thức Định cấu hình của lớp Khởi động bằng cách sử dụng cá thểIApplicationBuilder.

Run () là một phương thức mở rộng trên phiên bản IApplicationBuilder để thêm một terminalmiddleware vào đường dẫn yêu cầu của ứng dụng.

Phương thức Run là một phương thức mở rộng trên IApplicationBuilder và chấp nhận tham số của RequestDelegate.

chữ ký của phương thức Run

public static void Run(this IApplicationBuilder app, RequestDelegate handler)

chữ ký của RequestDelegate

public delegate Task RequestDelegate(HttpContext context);

Ví dụ

public class Startup{
   public Startup(){
   }
   public void Configure(IApplicationBuilder app, IHostingEnvironment env,
   ILoggerFactory loggerFactory){
      //configure middleware using IApplicationBuilder here..
      app.Run(async (context) =>{
         await context.Response.WriteAsync("Hello World!");
      });
      // other code removed for clarity..
   }
}

Hàm MyMiddleware ở trên không phải là không đồng bộ và do đó sẽ chặn luồng khi nó hoàn thành việc thực thi. Vì vậy, hãy làm cho nó không đồng bộ bằng cách sử dụng async andawait để cải thiện hiệu suất và khả năng mở rộng.

public class Startup{
   public Startup(){
   }
   public void Configure(IApplicationBuilder app, IHostingEnvironment env){
      app.Run(MyMiddleware);
   }
   private async Task MyMiddleware(HttpContext context){
      await context.Response.WriteAsync("Hello World! ");
   }
}

Định cấu hình nhiều phần mềm trung gian bằng Run ()

Phần sau sẽ luôn thực thi phương thức Run đầu tiên và sẽ không bao giờ đạt đến phương thức Run thứ hai

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.Run(async (context) =>{
      await context.Response.WriteAsync("1st Middleware");
   });
   // the following will never be executed
   app.Run(async (context) =>{
      await context.Response.WriteAsync(" 2nd Middleware");
   });
}

SỬ DỤNG

Để định cấu hình nhiều phần mềm trung gian, hãy sử dụng phương thức mở rộng Use (). Nó tương tự như phương thức Run () ngoại trừ nó bao gồm tham số tiếp theo để gọi phần mềm trung gian tiếp theo trong phương thức này

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.Use(async (context, next) =>{
      await context.Response.WriteAsync("1st Middleware!");
      await next();
   });
   app.Run(async (context) =>{
      await context.Response.WriteAsync("2nd Middleware");
   });
}