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

Việc sử dụng tiện ích mở rộng Bản đồ trong khi thêm phần mềm trung gian vào đường ống C # ASP.NET Core là gì?

Phần mềm trung gian là các thành phần phần mềm được tập hợp thành một đường dẫn ứng dụng để xử lý các yêu cầu và phản hồi.

Mỗi thành phần chọn có chuyển yêu cầu đến thành phần tiếp theo trong đường ống hay không và có thể thực hiện các hành động nhất định trước và sau khi thành phần tiếp theo được gọi trong đường ống.

Phần mở rộng bản đồ được sử dụng làm quy ước để phân nhánh đường ống.

Phương thức mở rộng Bản đồ được sử dụng để đối sánh các đại biểu yêu cầu dựa trên một đường dẫn yêu cầu. Bản đồ chỉ chấp nhận một đường dẫn và một chức năng định cấu hình một đường dẫn phần mềm trung gian riêng biệt.

Trong ví dụ sau, bất kỳ yêu cầu nào có đường dẫn cơ sở là / maptest sẽ được xử lý bằng đường ống được định cấu hình trong phương thức HandleMapTest.

Ví dụ

private static void HandleMapTest(IApplicationBuilder app){
   app.Run(async context =>{
      await context.Response.WriteAsync("Map Test Successful");
   });
}
public void ConfigureMapping(IApplicationBuilder app){
   app.Map("/maptest", HandleMapTest);
}

Ngoài ánh xạ dựa trên đường dẫn, phương pháp MapWhen hỗ trợ phân nhánh phần mềm dựa trên vị từ, cho phép xây dựng các đường ống riêng biệt theo một cách rất linh hoạt.

Bất kỳ vị từ nào thuộc loại Func đều có thể được sử dụng để ánh xạ các yêu cầu tới nhánh mới của đường ống.

private static void HandleBranch(IApplicationBuilder app){
   app.Run(async context =>{
      await context.Response.WriteAsync("Branch used.");
   });
}
public void ConfigureMapWhen(IApplicationBuilder app){
   app.MapWhen(context => {
      return context.Request.Query.ContainsKey("branch");
   }, HandleBranch);
      app.Run(async context =>{
         await context.Response.WriteAsync("Hello from " + _environment);
   });
}

Các bản đồ cũng có thể được lồng vào nhau

app.Map("/level1", level1App => {
   level1App.Map("/level2a", level2AApp => {
      // "/level1/level2a"
      //...
   });
   level1App.Map("/level2b", level2BApp => {
      // "/level1/level2b"
      //...
   });
});