2014-01-24 160 views
16

我已经使用.Net 4.5创建了WebAPI,并且想要使用Swagger来记录此API。我在.Net项目中添加了swagger-ui。现在,当我浏览到../swagger-ui/index.html时,它以swagger UI格式成功打开pet store api-docs(json)。以swagger json格式生成WebAPI文档

我的问题是我如何为我的WebAPI控制器和模型创建这样的(swagger)json?因为我已经将所需的XML摘要/注释放入c#类和属性中。

我看到Swagger.NetSwashbuckle有没有做类似的事情,但我真的不明白如何使用它们中的任何一个来生成swagger-json文件。我可能会犯一个很小的错误,但无法指出。

请帮忙。

+0

我想做与此相反http://stackoverflow.com/questions/10560857/swagger-with-static-documentation – theGeekster

+1

您是否发现问题的任何解决方案?在没有运行Web服务器的情况下,我对json规范的生成也很感兴趣。 – Shrike

+0

不,我找不到任何解决方案,它支持WebAPI的属性路由。 – theGeekster

回答

4

您需要Swagger.NET集成到您的项目,以便结束与以下控制器:

public class SwaggerController : ApiController { /* snip */ } 

,你也应该有注册下列路线:

context.Routes.MapHttpRoute (
name : "Swagger", 
routeTemplate: "api/swagger" 
defaults: new 
{ 
    controller = "Swagger", 
    action = "Get", 
}); 

假设正在工作,你应该可以打电话给/ api/swagger,并得到如下内容:

{ 
    apiVersion: "4.0.0.0", 
    swaggerVersion: "2.0", 
    basePath: "http://localhost:5555", 
    resourcePath: null, 
    apis: [ 
    { 
    path: "/api/docs/Values", 
    description: "No Documentation Found.", 
    operations: [ ] 
    }, 
    { 
    path: "/api/docs/Home", 
    description: "No Documentation Found.", 
    operations: [ ] 
    } 
] 

}

然后在SwaggerUI/index.html的你要更新discoveryUrl:

<script type="text/javascript"> 
    $(function() { 
     window.swaggerUi = new SwaggerUi({ 
      discoveryUrl: "http://localhost:5555/api/swagger", 
      apiKey:"", 
      dom_id:"swagger-ui-container", 
      supportHeaderParams: false, 
      supportedSubmitMethods: ['get', 'post', 'put'] 
     }); 

     window.swaggerUi.load(); 
    }); 
</script> 
+1

这又是运行时版本的doc。我们必须运行一个Web服务器来获取/显示文档。但问题是关于如何生成json规范。我也对这个主题感兴趣 - 我需要在build上生成一个json Swagger spec文件。 – Shrike

+0

Swagger.Net将使用ASP.NET ApiExplorer为您生成json规范。如果因为某些原因需要保存json spec文件,只需调用url并将结果保存到文件中即可。 –

+1

某些数据将始终只在运行时可用,这就是为什么您需要运行该服务。例如,路由将由代码定义,因此静态分析无法在不运行服务的情况下猜测实际路由。 –

19

如前所述,/招摇带你到招摇UI。

如果您使用的是Swashbuckle,那么/swagger/docs/v1应该带您到swagger.json文件 - 我使用Chrome Dev工具找到了这个文件。

编辑:如果你使用Swashbuckle.AspNetCore,那么URL略有不同 - /swagger/v1/swagger.json

+0

这就是如果你正在使用Swashbuckle。 –

+0

谢谢彼得,编辑 –

+0

MAGIC !!! @mattFrear –