1. 程式人生 > 其它 >在ASP.NET Core web API使用Swagger/OpenAPI(二)

在ASP.NET Core web API使用Swagger/OpenAPI(二)

實戰

首先介紹三個重要元件:

  • Swashbuckle.AspNetCore.Swagger:一個把SwaggerDocument物件暴露成JSON端點(openapi.json對應的URI)的Swagger物件模型和中介軟體。
  • Swashbuckle.AspNetCore.SwaggerGen:一個根據Routes(路由),Controllers(控制器),Models(模型物件)生成SwaggerDocument的生成器,它通常與Swagger端點中介軟體相結合,自動公開Swagger JSON(openapi.json)。
  • Swashbuckle.AspNetCore.SwaggerUI:根據openapi.json生成的對應的UI介面

一、安裝包

方式一:在與專案資料夾相同的目錄下執行如下程式碼:

Install-Package Swashbuckle.AspNetCore -Version 6.2.3

方式二:使用Nuget包管理工具:

新增並配置Swagger中介軟體

Program.cs檔案中把Swagger生成器新增到服務集合

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            // Register the Swagger services
            <span style="backgroundColo:yellow">services.AddSwaggerDocument();</span>
        }

也在Program.cs啟用生成JSON文件和SwaggerUI的中介軟體

        if (env.IsDevelopment())
        {
<div style="backgroundColo:yellow">
             // Enable middleware to serve generated Swagger as a JSON endpoint.
             app.UseSwagger();
             // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
             // specifying the Swagger JSON endpoint.
             app.UseSwaggerUI();
</div>
        }

上面新增的兩行程式碼只有在開發環境時才會生效,如果想在生產環境也使用Swagger,就別放在上面的if判斷內

執行程式並訪問https://localhost:<port>/swagger/v1/swagger.json就能看到openapi.json文件了。port為自己電腦對應的埠比如(預設5000或5001)

通過https://localhost:<port>/swagger路徑訪問SwaggerUI
如果想把SwaggerUI的路徑設定成根路徑(https://localhost:/),把對應的RoutePrefix屬性設為空字串就行了


             app.UseSwaggerUI(options =>
             {
                 options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
<div style="backgroundColo:yellow">
                 options.RoutePrefix = string.Empty;
</div>
             });

        }

如果使用了IIS或者反向代理,用過新增./字首來Swagger端點使用相對地址,例如 ./swagger/v1/swagger.json,/swagger/v1/swagger.json表示程式在URL的真實跟目錄下尋找JSON檔案,比如使用https://localhost:<port>/<route_prefix>/swagger/v1/swagger.json而不是https://localhost:<port>/<virtual_directory>/<route_prefix>/swagger/v1/swagger.json

注意: