什么导致swagger已经出现在Web API 2的路径集合中?

时间:2017-02-14 21:36:50

标签: asp.net-web-api2 swagger swashbuckle

我在我的ASP.Net MVC Core项目中安装了Swagger,它正在精美地记录我的API。

我的同事让我在完整的框架4.6.1项目中安装它,所以我已经完成了以下工作。

在Package Console Manager中运行:

Install-Package Swashbuckle

让Test Web API控制器正常工作: 1)在WebApi.config中注释掉它:

// config.SuppressDefaultHostAuthentication();
// config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

现在这个网址: http://localhost:33515/api/Test 带回XML:

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>value1</string>
<string>value2</string>
</ArrayOfstring>

在Global.asax Register()中,我打电话给:

 SwaggerConfig.Register();

在AppStart.Swagger.Config Register()中,我把:

public class SwaggerConfig
{
    public static void Register()
    {     
       var thisAssembly = typeof(SwaggerConfig).Assembly;
       GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1.0", "HRSA CHAFS");
                    c.IncludeXmlComments(GetXmlCommentsPath());
                })
              .EnableSwaggerUi(c =>
                {});
    }

    private static string GetXmlCommentsPath()
    {
        var path = String.Format(@"{0}bin\Services.XML", AppDomain.CurrentDomain.BaseDirectory);
        return path;

    }
}

现在我收到此错误: &#34;名为&#39; swagger_docsswagger / docs / {apiVersion}的路线&#39;已经在路线集合中。路线名称必须是唯一的。&#34;

我已经被困在这几个小时了。 你怎么摆脱这个?

4 个答案:

答案 0 :(得分:13)

重命名.NET程序集时可能会发生这种情况。具有先前程序集名称的DLL将出现在bin文件夹中。这会导致招摇错误。

删除bin文件夹并重新构建解决方案。 这解决了招摇错误。

答案 1 :(得分:2)

Swagger配置使用应用程序前启动钩子,因此您无需显式调用SwaggerConfig.Register()。否则,Register方法将被调用两次。

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

答案 2 :(得分:0)

我通过从App_Start文件夹中删除SwaggerConfig.cs文件解决了该问题,因为我已经手动创建了它。 看一下此链接,这里还有更多有用的信息:

A route named 'DefaultApi' is already in the route collection error

答案 3 :(得分:0)

就我而言,我添加了另一个项目作为参考,而另一个项目也大摇大摆。 我删除该引用并将所需代码移至新项目。