如何使用 OWIN 在 Swashbuckle 为 WebApi 2 生成的 Swagger 文档中包含 class 和 属性 描述?
How to include class and property descriptions in Swashbuckle generated Swagger docs for WebApi 2 with OWIN?
没想到不一样
我认为这应该是不言自明的。我想在 Swagger 文档中包含 class 描述。我的 Swagger
配置如下所示:
config.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "My Api Name");
c.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();
c.IncludeXmlComments(GetXmlCommentsPath());
}).EnableSwaggerUi(c => { });
而 MyAwesomeController
看起来像这样:
/// <summary>
/// Controller description (is included by Swashbuckle)
/// </summary>
public class MyAwesomeController : ApiController
{
/// <summary>
/// Method description (is included by Swashbuckle)
/// </summary>
public IHttpActionResult Get()
{
return Ok("hello... from the other side");
}
public IHttpActionResult Post([FromBody]MyAwesomeModel model)
{
return Ok("hello... from the other side");
}
}
我的 MyAwesomeModel
看起来像这样:
/// <summary>
/// **I would like this to be included in the Swagger description of the parameter**
/// </summary>
public class MyAwesomeModel
{
/// <summary>
/// **I would like this to be included in the Swagger description of the parameter**
/// </summary>
public string MyProperty { get; set; }
}
如果不雇用 Sr. Skeet,这可能吗?
如果你写了下面的语句
c.IncludeXmlComments(GetXmlCommentsPath());
你能检查xml注释路径方法returns放置项目XML文档文件的xml文件的路径吗?
嗯...所以也许如果其他人遇到这个。
基本上我找到了一种方法可以做到这一点,我意识到为什么默认情况下没有这样做。不确定这是否是最好的方法,但就是这样。
在我的解决方案中,POCO 位于与实际 API 不同的项目中,因此 MyAwesomeModel
的注释描述未包含在内,因为没有生成 XML 节点对于 类 和属性。因此,在我的 POCO 所在的单独项目中,我修改了属性以生成 XML.
- 为 POCO 所在的项目生成XML
- 确保 XML 被复制到您希望
Swashbuckle
查找它的任何路径。我在项目属性中使用了Post-build event command line
;
copy "$(SolutionDir)MyAwesomeProjectWithPocos\bin\MyAwesomeProjectWithPocos.xml" "$(ProjectDir)\bin\MyAwesomeProjectWithPocos.xml"
- 修改
SwaggerConfig
以包含此 XML
即
config.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "My Api Name");
c.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();
c.IncludeXmlComments(GetXmlCommentsPath());
c.IncludeXmlComments(GetXmlCommentsPathForModels());
}).EnableSwaggerUi(c => { });
现在,在 Swagger 页面上,如果我从 Model Schema
切换到 Model
,我现在可以阅读整个模型和 属性 描述。
当然,不需要复制 XML 文件,可以在步骤 #3 中指向正确的位置 GetXmlCommentsPathForModels());
但这是我的选择。
没想到
我认为这应该是不言自明的。我想在 Swagger 文档中包含 class 描述。我的 Swagger
配置如下所示:
config.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "My Api Name");
c.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();
c.IncludeXmlComments(GetXmlCommentsPath());
}).EnableSwaggerUi(c => { });
而 MyAwesomeController
看起来像这样:
/// <summary>
/// Controller description (is included by Swashbuckle)
/// </summary>
public class MyAwesomeController : ApiController
{
/// <summary>
/// Method description (is included by Swashbuckle)
/// </summary>
public IHttpActionResult Get()
{
return Ok("hello... from the other side");
}
public IHttpActionResult Post([FromBody]MyAwesomeModel model)
{
return Ok("hello... from the other side");
}
}
我的 MyAwesomeModel
看起来像这样:
/// <summary>
/// **I would like this to be included in the Swagger description of the parameter**
/// </summary>
public class MyAwesomeModel
{
/// <summary>
/// **I would like this to be included in the Swagger description of the parameter**
/// </summary>
public string MyProperty { get; set; }
}
如果不雇用 Sr. Skeet,这可能吗?
如果你写了下面的语句
c.IncludeXmlComments(GetXmlCommentsPath());
你能检查xml注释路径方法returns放置项目XML文档文件的xml文件的路径吗?
嗯...所以也许如果其他人遇到这个。
基本上我找到了一种方法可以做到这一点,我意识到为什么默认情况下没有这样做。不确定这是否是最好的方法,但就是这样。
在我的解决方案中,POCO 位于与实际 API 不同的项目中,因此 MyAwesomeModel
的注释描述未包含在内,因为没有生成 XML 节点对于 类 和属性。因此,在我的 POCO 所在的单独项目中,我修改了属性以生成 XML.
- 为 POCO 所在的项目生成XML
- 确保 XML 被复制到您希望
Swashbuckle
查找它的任何路径。我在项目属性中使用了Post-build event command line
;
copy "$(SolutionDir)MyAwesomeProjectWithPocos\bin\MyAwesomeProjectWithPocos.xml" "$(ProjectDir)\bin\MyAwesomeProjectWithPocos.xml"
- 修改
SwaggerConfig
以包含此 XML
即
config.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "My Api Name");
c.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();
c.IncludeXmlComments(GetXmlCommentsPath());
c.IncludeXmlComments(GetXmlCommentsPathForModels());
}).EnableSwaggerUi(c => { });
现在,在 Swagger 页面上,如果我从 Model Schema
切换到 Model
,我现在可以阅读整个模型和 属性 描述。
当然,不需要复制 XML 文件,可以在步骤 #3 中指向正确的位置 GetXmlCommentsPathForModels());
但这是我的选择。