<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET Core API文檔管理組件 Swagger

          共 4584字,需瀏覽 10分鐘

           ·

          2020-09-13 02:41

          Swagger這個優(yōu)秀的開源項目相信大家都用過,不多介紹了,這里簡單記錄一下使用過程。

          開源地址:https://github.com/domaindrivendev/Swashbuckle.AspNetCore

          在項目中添加組件

          Install-Package Swashbuckle.AspNetCore

          下面用最少的代碼完成接入,在Startup啟動項中配置。

          public?void?ConfigureServices(IServiceCollection?services)
          {
          ????...
          ????services.AddSwaggerGen(x?=>
          ????{
          ????????x.SwaggerDoc("v1",?new?Microsoft.OpenApi.Models.OpenApiInfo
          ????????{
          ????????????Version?=?"v1.0.0",
          ????????????Title?=?"Api",
          ????????????Description?=?"XXX?Api"
          ????????});
          ????});
          ????...
          }
          public?void?Configure(IApplicationBuilder?app,?IWebHostEnvironment?env)
          {
          ????...

          ????app.UseSwagger();
          ????app.UseSwaggerUI(c?=>
          ????{
          ????????c.SwaggerEndpoint("/swagger/v1/swagger.json",?"API");
          ????});
          ????...
          }

          這樣便完成了,swagger會自動發(fā)現(xiàn)我們在controller中寫的api,默認(rèn)打開頁面為:~/swagger

          同時還可以讓其支持分組展示,只需要像上面一樣配置多個節(jié)點(diǎn)信息接口,如下面代碼:

          services.AddSwaggerGen(options?=>
          {
          ????options.SwaggerDoc("v1",?new?Microsoft.OpenApi.Models.OpenApiInfo
          ????{
          ????????Version?=?"v1.0.0",
          ????????Title?=?"Api1",
          ????????Description?=?"XXX?Api1"
          ????});

          ????options.SwaggerDoc("v2",?new?Microsoft.OpenApi.Models.OpenApiInfo
          ????{
          ????????Version?=?"v1.0.0",
          ????????Title?=?"Api2",
          ????????Description?=?"XXX?Api2"
          ????});
          });
          app.UseSwaggerUI(c?=>
          {
          ????c.SwaggerEndpoint("/swagger/v1/swagger.json",?"API1");
          ????c.SwaggerEndpoint("/swagger/v2/swagger.json",?"API2");
          });

          如果在控制器中不指定接口的分組名稱,那么每個分組都會顯示這個接口,如果需要單獨(dú)指定可以使用特性[ApiExplorerSettings(GroupName = "v1")]這樣。

          如果想要顯示接口的注釋,模型的注釋等信息,需要我們將對應(yīng)的項目設(shè)置輸出XML文件,并在代碼中使用options.IncludeXmlComments(xxx.xml)即可。

          下面來說一下swagger的一些其它功能,當(dāng)我們接口開啟了JWT方式的認(rèn)證,默認(rèn)swagger是不支持的,需要我們手動去適配一下。

          需要額外添加一個組件

          Install-Package Swashbuckle.AspNetCore.Filters
          context.Services.AddSwaggerGen(options?=>
          {
          ????...

          ????var?security?=?new?OpenApiSecurityScheme
          ????{
          ????????Description?=?"please?enter?Bearer?{Token}?for?authentication.",
          ????????Name?=?"Authorization",
          ????????In?=?ParameterLocation.Header,
          ????????Type?=?SecuritySchemeType.ApiKey
          ????};

          ????options.AddSecurityDefinition("oauth2",?security);
          ????options.AddSecurityRequirement(new?OpenApiSecurityRequirement?{?{?security,?null?}?});
          ????options.OperationFilter();
          ????options.OperationFilter();
          ????options.OperationFilter();
          });

          現(xiàn)在UI界面便會出現(xiàn)小綠鎖,這樣就可以很方便的在swagger上進(jìn)行需要授權(quán)的接口調(diào)試工作了。

          同時swagger還支持一些高級操作,比如自定義UI界面、注入JS、CSS代碼,因為這個用的不是很多,實(shí)際要用的時候可以去GitHub查看使用方法。

          //?Customize?index.html
          app.UseSwaggerUI(c?=>
          {
          ????c.IndexStream?=?()?=>?GetType().Assembly.GetManifestResourceStream("CustomUIIndex.Swagger.index.html");
          });

          //?Inject?Custom?CSS
          app.UseSwaggerUI(c?=>
          {
          ????...
          ????c.InjectStylesheet("/swagger-ui/custom.css");
          }

          這里還要說一下swagger的過濾器,我們可以實(shí)現(xiàn)IDocumentFilter接口,來實(shí)現(xiàn)自定義的接口排序,個性化接口描述,以及各種騷操作,比如我們想要隱藏某些API,當(dāng)然隱藏API可以使用.NET Core 的特性[ApiExplorerSettings(IgnoreApi = true)]實(shí)現(xiàn)。

          這里隱藏是指不在swaggerUI中顯示,實(shí)際接口還是存在的。

          public?class?SwaggerDocumentFilter?:?IDocumentFilter
          {
          ????public?void?Apply(OpenApiDocument?swaggerDoc,?DocumentFilterContext?context)
          ????{
          ????????var?tags?=?new?List
          ????????{
          ????????????new?OpenApiTag?{
          ????????????????Name?=?"Authentication",
          ????????????????Description?=?"Authentication",
          ????????????????ExternalDocs?=?new?OpenApiExternalDocs?{?Description?=?"Authentication"?}
          ????????????},
          ????????????new?OpenApiTag?{
          ????????????????Name?=?"Localization",
          ????????????????Description?=?"Localization",
          ????????????????ExternalDocs?=?new?OpenApiExternalDocs?{?Description?=?"Localization"?}
          ????????????}
          ????????};

          ????????swaggerDoc.Tags?=?tags.OrderBy(x?=>?x.Name).ToList();

          ????????var?apis?=?context.ApiDescriptions.Where(x?=>?x.RelativePath.Contains("abp"));
          ????????if?(apis.Any())
          ????????{
          ????????????foreach?(var?item?in?apis)
          ????????????{
          ????????????????swaggerDoc.Paths.Remove("/"?+?item.RelativePath);
          ????????????}
          ????????}
          ????}
          }

          上面這段代碼,使用了abp框架搭建的項目,abp默認(rèn)實(shí)現(xiàn)了一部分接口,如果我們不需要的話就可以使用上面的方式進(jìn)行過濾。

          最后一點(diǎn),如果我們用了第三方框架,像上面說的abp,或者使用了動態(tài)API生成的組件,比如:Plus.AutoApi,想要在swagger中顯示出api接口,需要添加下面這句代碼。

          context.Services.AddSwaggerGen(options?=>
          {
          ????...
          ????options.DocInclusionPredicate((docName,?description)?=>?true);
          ????...
          });

          swagger推出的同時還推出了一款工具ReDoc,下面也簡單介紹一下。

          ReDocswagger比較類似,只是一個文檔展示工具,不提供接口調(diào)試的功能。

          他們的使用方式基本一致,先在項目中添加一下組件

          Install-Package Swashbuckle.AspNetCore.ReDoc

          OnApplicationInitialization中直接添加一句配置即可。

          app.UseReDoc();

          它支持多種參數(shù)選項,可以自行查看,默認(rèn)打開頁面為:~/api-docs,下面是他的UI界面。


          往期精彩回顧




          【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程?★★★

          .NET Core實(shí)戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個接口多種實(shí)現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了

          給我好看

          您看此文用

          ??·?

          秒,轉(zhuǎn)發(fā)只需1秒呦~

          好看你就

          點(diǎn)點(diǎn)


          瀏覽 71
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼的网| 尻逼逼| 猫咪www成人免费网站无码 | 亚洲AV无码国产精品夜色午夜 | 日韩欧美在线观看视频 |