Swashbuckle 5.4.0和Xml文档

时间:2016-08-31 23:37:08

标签: c# asp.net-web-api swagger-2.0 swashbuckle

我已经安装了带有WebApi 2.2的Swashbuckle 5.4.0,IIS托管。我的基本swagger文档显示没有任何问题,但是我指向的XML文档中没有任何内容在UI中呈现,也没有在JSON中显示。所以我看到的是方法,没有备注,摘要等。

我知道XML文档已被发现,因为我没有收到任何错误(当我将路径更改为不存在的文件时,会出现错误)但由于某种原因它只是不包括文件中的任何内容。我尝试重新安装Swashbuckle和WebApi的nuget包,我尝试生成并重新生成XML,甚至尝试重建XML的基本版本只是为了测试,但到目前为止还没有运气。

关于这里可能出现什么问题的想法,或者我可以尝试的任何建议?

以下代码段:

控制器:

[RoutePrefix("rest/v1/helloworld")]
public class HelloWorldController : ApiController
{
    /// <summary>
    /// Hello World
    /// </summary>
    /// <remarks>Hello World basic test</remarks>
    /// <response code="401">Unauthorized</response>
    [HttpGet]
    [Route("")]
    public HttpResponseMessage Get()
    {
        HttpActionContext aC = this.ActionContext;

        return aC.Request.CreateResponse(HttpStatusCode.OK, "Hello World");
    }              

}

Xml文档:

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>SwaggerApi</name>
    </assembly>
    <members>
        <member name="M:HelloWorldController.Get">
            <summary>Hello World</summary>
            <remarks>Hello World basic test</remarks>
            <response code="401">Unauthorized</response>
        </member>
    </members>
</doc>

SwaggerConfig.cs片段:

EnableSwagger(c =>
{
    c.SingleApiVersion("v1", "ASP");
    c.IncludeXmlComments(string.Format(@"{0}\bin\SwaggerApi.xml",System.AppDomain.CurrentDomain.BaseDirectory));
})

1 个答案:

答案 0 :(得分:3)

找到了答案。正在强制执行命名空间,这意味着存在于命名空间外部的任何对象都将具有包含以...开头的方法名称的xpath。 (例如M:.HelloWorldController.Get)而创建的xml的成员名称为M:HelloWorldController.Get,因此找不到该节点。这不仅会影响方法,还会影响params,因此任何没有命名空间定义的自定义对象也会导致无法找到该方法的成员节点。