0

我已經在ASP.Net Core(版本1.1.2)中構建了一個Web API,並且我使用Swashbuckle.AspNetCore生成了swagger定義。如何在.Net Core Web API的swagger中設置基本路徑屬性

下面是自動生成的放大器定義的一部分。我想改變路徑,以便它不包括/API/ApiName,但將它列入基本路徑這是現在/

{ 
    "swagger": "2.0", 
    "info": { 
     "version": "v1", 
     "title": "ApiName.V1" 
    }, 
    "host": "ApiUrl", 
    "basePath": "/api/ApiName", 
    "paths": { 
     "/": { 
      "get": { 
       "tags": [ 
        "ApiName" 
       ], 
       ......... 

所以我想獲得的是:

{ 
    "swagger": "2.0", 
    "info": { 
     "version": "v1", 
     "title": "ApiName.V1" 
    }, 
    "host": "ApiUrl", 
    "basePath": "/", 
    "paths": { 
     "/api/ApiName": { 
      "get": { 
       "tags": [ 
        "ApiName" 
       ], 
       ......... 

我們有一些其他API不是用.Net Core編寫的,它通過添加默認路由來解決相同的問題。我試圖通過刪除API控制器頂部的路徑來執行.Net內核上的相同操作。

[Route("api/[Controller]")] 

並將其添加到Startup.cs中。然而這沒有奏效。有沒有人有任何想法如何解決這個問題?

回答

0
到底

我用這個來解決它:

可以設置PreSerializeFilters同時添加的基本路徑,然後編輯路徑。認爲會有更優雅的方式,但這是有效的。

  var basepath = "/api/AppStatus"; 
      c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = basepath); 


      c.PreSerializeFilters.Add((swaggerDoc, httpReq) => { 
       IDictionary<string, PathItem> paths = new Dictionary<string, PathItem>(); 
       foreach (var path in swaggerDoc.Paths) 
       { 
        paths.Add(path.Key.Replace(basepath, "/"), path.Value); 
       } 
       swaggerDoc.Paths = paths; 
      }); 
相關問題