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; 
      }); 
相关问题