1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        .NET Core API文檔管理組件 Swagger

        共 4584字,需瀏覽 10分鐘

         ·

        2020-09-13 02:41

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

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

        在項(xiàng)目中添加組件

        Install-Package Swashbuckle.AspNetCore

        下面用最少的代碼完成接入,在Startup啟動(dòng)項(xiàng)中配置。

        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會(huì)自動(dòng)發(fā)現(xiàn)我們在controller中寫的api,默認(rèn)打開頁面為:~/swagger

        同時(shí)還可以讓其支持分組展示,只需要像上面一樣配置多個(gè)節(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");
        });

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

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

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

        需要額外添加一個(gè)組件

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

        同時(shí)swagger還支持一些高級操作,比如自定義UI界面、注入JS、CSS代碼,因?yàn)檫@個(gè)用的不是很多,實(shí)際要用的時(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)自定義的接口排序,個(gè)性化接口描述,以及各種騷操作,比如我們想要隱藏某些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框架搭建的項(xiàng)目,abp默認(rèn)實(shí)現(xiàn)了一部分接口,如果我們不需要的話就可以使用上面的方式進(jìn)行過濾。

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

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

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

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

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

        Install-Package Swashbuckle.AspNetCore.ReDoc

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

        app.UseReDoc();

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


        往期精彩回顧




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

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

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

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

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

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

        用abp vNext快速開發(fā)Quartz.NET定時(shí)任務(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ī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产禁18女A片水多多 | 大桥未久av在线播放 | 嗯~啊~轻一点视频在线观看 | 国产裸体免费无遮挡 | 久久夫妻碰撞 | www.男人天堂 | 国产肥臀对白刺激在线视频 | 六月婷婷在线 | 日本草逼网站 | 高清无码三级 |