【问题标题】:services.AddSwaggerGen() giving errorservices.AddSwaggerGen() 给出错误
【发布时间】:2017-04-30 14:53:18
【问题描述】:

我想要做的只是将 swagger 添加到 ASP.Net Core 应用程序中。我正在看一个教程,我看到他们所做的只是在 Startup.cs 文件的配置服务区域下添加services.AddSwaggerGen();。像 MVC 之类的任何普通服务一样......但我收到一个错误:

没有给出与所需形式参数“setupAction”相对应的参数...

我没有看到有人向 services.AddSwaggerGen() 提供任何类型的论据,所以有人知道我在这里缺少什么吗?

我添加了 SwashBuckler.AspNetCore 依赖项,因此应用程序中出现了招摇。只是不知道为什么它是红色的并给出上述错误。

【问题讨论】:

    标签: c# asp.net-core swagger


    【解决方案1】:

    我有问题,那个

    IServiceCollection 不包含“AddSwaggerGen”的定义

    事实证明,我安装了 Swashbuckle.AspNetCore.Swagger nuget 包而不是 Swashbuckle.AspNetCore

    在 .NET Core 3 中,存在一些已讨论的问题 here。解决方案是在项目文件中添加以下内容,替换之前的版本。

    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc2" />
    <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0-rc2" />
    

    【讨论】:

    • 我不能在 24 小时之前奖励你赏金。但是你有一个来了,伙计。
    • 只是补充一下,现在一年后,VS2019 已经发布,现在,当我安装“Swashbuckle.AspNetCore”的最新版本(v4.0.1)时,它在构建时确实抛出了这个错误.如果我删除该版本,然后添加同一库的 v3.x,那么它确实可以构建。所以,小心点……这东西又变了……
    【解决方案2】:

    发生这种情况是因为在 ASP.NET Core 中实现 AddSwaggerGen() 扩展方法需要您提供用作设置操作的 Action&lt;SwaggerGenOptions&gt; 参数。例如:

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
    });
    

    您可以详细了解如何使用 ASP.NET Core 应用程序 here 设置 Swagger。

    更新: 在以前的版本中,他们有 AddSwaggerGen() 扩展方法,不接受任何参数,但是这个调用伴随着调用 ConfigureSwaggerDocument(Action&lt;SwaggerGenOptions&gt; setupAction)。我猜他们只是摆脱了ConfigureSwaggerDocument 并在AddSwaggerGen() 方法中添加了设置操作。话虽如此,您的教程似乎展示了如何设置过时版本的 Swagger。

    【讨论】:

      【解决方案3】:

      对于.Net core项目,需要安装四个包。最好使用 Nuget 包管理器,以便它需要适当的所需版本。

      Microsoft.OpenApi
      Swashbuckle.AspNetCore.Swagger
      Swashbuckle.AspNetCore.SwaggerGen
      Swashbuckle.AspNetCore.SwaggerUI
      

      【讨论】:

      • 这就是我的答案,我明确需要删除 Swashbuckle.AspNetCore 并仅使用这四个与 swagger 相关的包。
      【解决方案4】:

      迟到的答案,但作为这个问题的新更新,我刚刚注意到为了使 AddSwaggerGen 在 .NET Core 3 中正常工作,您需要使用 OpenApiInfo 而不是 Info。所以你的新AddSwaggerGen 应该是这样的:

      services.AddSwaggerGen(c =>
      {
          c.SwaggerDoc("v1", new OpenApiInfo { Title = "The API", Version = "v1" });
      });
      

      您还需要将以下内容添加到您的 using 指令中:

      using Microsoft.OpenApi.Models;
      

      在此处阅读更多信息https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.1&tabs=visual-studio

      【讨论】:

        【解决方案5】:

        如果您在尝试部署 Web 应用程序并将 Swagger 规范添加到 Azure 中的 API 管理(来自 Visual Studio)时遇到此问题 -> 检查您的存储库的本地路径 - 如果其中有空格,则会失败。

        要修复 - 将您的 repo 移动到其他位置,这样路径就没有空间了。 我使用的是 Swashbuckle.AspNetCore 包的 6.1.4 版本。

        【讨论】:

        • 在哪里转义空格?正如问题所要求的那样,您应该做的就是在您的 Startup 课程中包括:services.AddSwaggerGen()。如果回购的本地路径中有空格,我发现这会失败。
        • 这对我来说也是个问题。我们的 Azure DevOps 存储库名称有一个空格,因此解决方案的完整路径有一个空格。当我将解决方案移动到没有任何空间的不同路径时,它起作用了。
        猜你喜欢
        • 2017-12-20
        • 2012-09-25
        • 2013-03-21
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多