<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      dotnet Minimal APIs實(shí)現(xiàn)動態(tài)注冊端點(diǎn)

      dotnet Minimal APIs實(shí)現(xiàn)動態(tài)注冊端點(diǎn)

      前言

      之前使用.Net的Minimal Apis框架開發(fā)了SharpIcoWeb圖片轉(zhuǎn)ico項目,也是初次使用這個最小Api框架,使用下來的感受就是小項目用起來非常舒服,很輕量。

      在之前的項目中,我都是手動去注冊端點(diǎn),比如我創(chuàng)建了一個端點(diǎn)類IcoEndpoints

      public static class IcoEndpoints
      {
          public static void MapIcoEndpoints(this WebApplication app)
          {
              var group = app.MapGroup("/api");
              group.MapGet(...)
          }
      }
      

      然后我會在Program.cs中注冊這個端點(diǎn)類

      app.MapIcoEndpoints();
      

      那么如果不想每個端點(diǎn)類都通過手動去注冊,就可以使用動態(tài)注冊的方法,動態(tài)注冊的原理是通過反射和擴(kuò)展方法來完成注冊。

      動態(tài)注冊

      本文就是使用基于接口的自動注冊,還可以根據(jù)約定端點(diǎn)類命名、特性、標(biāo)記去實(shí)現(xiàn)注冊。

      文件層級結(jié)構(gòu)如下:

      SharpIcoWeb
      ├── Endpoints
      │   ├── Internal
      │   │   ├── EndpointExtensions.cs
      │   │   ├── IEndpoint.cs
      │   ├── IcoEndpoints.cs
      │   ├── testEndpoints.cs
      ├── Program.cs
      

      接口類

      首先目錄創(chuàng)建完成后,去創(chuàng)建IEndpoint接口類,讓每個端點(diǎn)類就去實(shí)現(xiàn)這個接口。

      注意:static abstract接口成員需要C# 11+ (.NET 7+) 支持

      public interface IEndpoint
      { 
          static abstract void MapEndpoints(IEndpointRouteBuilder app);
      }
      

      端點(diǎn)類

      測試端點(diǎn)類

      public class TestEndpoints : IEndpoint
      {
          public static void MapEndpoints(IEndpointRouteBuilder app)
          {
              app.MapGet("/test", async (context) =>
              {
                  await context.Response.WriteAsync("Hello, World!");
              });
          }
      }
      

      圖片轉(zhuǎn)Ico端點(diǎn)類

      public class IcoEndpoints: IEndpoint
      {
          public static void MapEndpoints(IEndpointRouteBuilder app)
          {
              var group = app.MapGroup("/api");
      
              // 上傳圖片文件并返回文件名
              group.MapPost("/uploadDownload", UploadDownload)
                  .DisableAntiforgery();
      
              // 獲取圖片信息
              group.MapGet("/getImageInfo/{filename}", GetImageInfo);
      
              // 下載文件
              group.MapGet("/downloads/{fileName}", DowloadFile);
      
              // 上傳圖片文件并返回文件名和不同尺寸的ICO文件的ZIP文件
              group.MapPost("/uploadDownload/sizes", UploadDownloadSizes)
                  .DisableAntiforgery();
          }
      }
      

      擴(kuò)展方法

      public static class EndpointExtensions
      {
          public static void MapAllEndpoints(this IEndpointRouteBuilder app)
          {
              var endpointTypes = Assembly.GetExecutingAssembly()
                  .GetTypes()
                  .Where(t => typeof(IEndpoint).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract);
      
              foreach (var type in endpointTypes)
              {
                  type.GetMethod(nameof(IEndpoint.MapEndpoints))?
                  .Invoke(null, new object[] { app });
              }
          }
      }
      

      Program.cs

      app.MapAllEndpoints();
      

      完成上述配置就可以實(shí)現(xiàn)自動注冊端點(diǎn)類了。

      測試訪問

      @SharpIcoWeb_HostAddress = http://localhost:5235
      
      ### 上傳文件并轉(zhuǎn)換為ICO(帶尺寸參數(shù))
      POST {{SharpIcoWeb_HostAddress}}/api/uploadDownload/sizes
      Content-Type: multipart/form-data; boundary=WebAppBoundary
      
      --WebAppBoundary
      Content-Disposition: form-data; name="file"; filename="1.png"
      Content-Type: image/png
      
      < ./1.png
      --WebAppBoundary
      Content-Disposition: form-data; name="sizes"
      
      16,32,48,64,128
      
      ### 測試端點(diǎn)類訪問
      GET {{SharpIcoWeb_HostAddress}}/test
      
      

      image

      可以看到新建的test接口也是可以正常訪問的。

      總結(jié)

      實(shí)現(xiàn)端點(diǎn)類的自動注冊需要使用反射和擴(kuò)展方法來完成。

      static abstract接口成員需要C# 11+ (.NET 7+) 支持

      可以思考一下如何將服務(wù)和端點(diǎn)一起注冊

      builder.Services.AddScoped<IFileService, FileService>();
      
      posted @ 2025-07-15 17:00  妙妙屋(zy)  閱讀(216)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 亚洲高清aⅴ日本欧美视频| 成人av午夜在线观看| 欧美成人精品手机在线| 最新成免费人久久精品| 久久婷婷成人综合色综合| 日本成人午夜一区二区三区| 综合无码一区二区三区| 久久精品国产熟女亚洲av| 亚洲精品日韩在线观看| 中文字幕成人精品久久不卡| 久久久久久久久18禁秘| 国产普通话对白刺激| 国产精品自在自线免费观看| 国产卡一卡二卡三免费入口| 大胸少妇午夜三级| 亚洲欧洲一区二区天堂久久| 疯狂做受XXXX高潮国产| 亚洲一二三区精品美妇| 日韩国产精品一区二区av| 中文字幕人妻熟女人妻a片| 国产精品久久久久7777| 草草线在成年免费视频2| 精品无码三级在线观看视频 | 在线日韩日本国产亚洲| 长宁县| 蜜臀91精品国产高清在线| 亚洲AV永久无码精品秋霞电影影院 | 自拍视频亚洲精品在线| 国产亚洲精品AA片在线爽| 国内精品无码一区二区三区| 亚洲av成人无网码天堂| 成人福利一区二区视频在线| 精品亚洲一区二区三区在线观看| 综合色一色综合久久网| 日韩精品中文字幕亚洲| 色综合久久人妻精品日韩| 久久99热只有频精品8| 中文字幕一区二区人妻| 国产成人 综合 亚洲欧洲| 一面膜上边一面膜下边视频| 翘臀少妇被扒开屁股日出水爆乳 |