【问题标题】:swagger-ui returns 500 after deploymentswagger-ui 部署后返回 500
【发布时间】:2015-11-25 11:03:24
【问题描述】:

开箱即用的配置在我的机器上完美运行,完全没有问题。

但是当我部署到我们的测试环境时 - 我收到以下消息

500 : { "Message": "发生错误。" } /api/swagger/docs/v1

部署到default web site/api

我猜它与 baseUrl 或类似的东西有关, 但我什至不知道从哪里开始。

我的路由在项目中运行良好 - 我可以调用我所有的 webapi 端点并且它们响应正确。

任何帮助将不胜感激

【问题讨论】:

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


    【解决方案1】:

    在调试时,我使用的是调试配置(我为以下各项生成了 XmlComments:属性 -> 构建选项卡 -> 输出 -> XML 文档文件)

    我没有为我的发布配置做这个(呃......) - 现在一切正常

    【讨论】:

    • 我遇到了同样的问题。我的部署是天蓝色的,但我仍然有问题。 stackoverflow.com/questions/39406820/…
    • 我的部署是在 azure 上,但我忘记了简单的事情。更改项目属性以创建发布模式的 XML 文件!
    • 目录应该是什么?
    • @Zapnologica 这取决于你告诉 swagger config 文件的位置。
    • 它对我有用,但现在完全相同的错误出现在所有方法的所有响应体中。 “消息”:“发生错误。”我现在应该去哪里看?谢谢
    【解决方案2】:

    谢谢@VisualBean。

    因为它对我来说不是那么明显......如何......一个简单的图像。

    在项目中 > 您的项目属性 > 构建选项卡

    【讨论】:

      【解决方案3】:

      由于您在 web.config 中的 customErrors 设置,Swashbuckle 隐藏了真正的错误消息。如果您将 customErrors 设置为 off,您应该会收到更好的错误消息。

      <system.web>
          <customErrors mode="Off"/>
      </system.web>
      

      【讨论】:

      • 如果第一个答案对您不起作用。使用此建议(打开自定义错误模式)查看程序中发生了什么。对我来说,我意识到有人在我们的一个 API 控制器中引入了一个模棱两可的端点。当我纠正这一点时,我们都很好。
      • 这是一个更好的第一步,而不是猜测错误是什么!
      【解决方案4】:

      如已接受的答案所述,您必须确保 XML 文档文件输出位于 bin 中,而不是 bin\Debugbin\Release em>(为所有构建配置验证这一点)。

      我仍然收到 500 响应,因为我使用了多个 XML 文档文件。 在我的 SwaggerConfig 实现中,我包含了来自两个项目(WebApi 项目本身和 WebApi 项目引用的类库)的 XML 文档文件:

      c.IncludeXmlComments(string.Format(@"{0}\bin\MyWebApiProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
      c.IncludeXmlComments(string.Format(@"{0}\bin\ReferencedProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
      

      WebApi 项目的 XML 文档文件已正确发布到站点的 bin 文件夹,但引用项目的 XML 文档文件未正确发布(即使它出现在 已编译的 bin 文件夹中强> 项目)。

      所以你需要在文本编辑器中修改WebApi项目文件(.csproj),并在底部添加以下部分(替换ReferencedProject):

      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
      </PropertyGroup>
      <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ReferencedProject\bin\ReferencedProject.xml" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
      

      请参阅How do you include additional files using VS2010 web deployment packages? 了解完整说明。

      【讨论】:

      【解决方案5】:

      问题是使用 -r Release 运行 dotnet publish 不会生成 XML 文件。但是,dotnet publish-r Debug 实际上确实会生成文件。这解释了为什么人们只有在部署到本地环境以外的环境时才会遇到这个问题,然后当发现异常只发生在产品上时才会踢自己。(它的发布)为了reporoduce,只需在本地运行这些命令并查看输出目录,您应该会看到问题。

      (更新)对我来说,解决方法是实际进入 .csproj 文件并添加一行以确保始终复制文件。 差异如下图

      【讨论】:

      • 如果您查看接受的答案,您可能会明白为什么会这样。 :)
      • @VisualBean 如果您推断解决方案是在使用属性窗口更改输出后修改 csproj 文件以更新输出 > XML,我不相信该解决方案是我的解决方案,我有同样的问题。相反,我的调试和发布配置完全相同,并且没有在 XML 文档文件中指定任何内容,但调试版本仍然会生成该文件用于调试,而不是用于发布。
      • 公认的答案是在发布设置和调试设置中打开 XML cmets。
      • @KarlGjertsen,通过“打开 XML”,你到底是什么意思?您的意思是在“XML 文档路径”中实际放置一个值?因为这对我来说不是解决方案,我只想知道您是否有具体证据证明这是解决方案,只是说“解决方案是 XYZ”。对我来说,解决方法是只将一个文档添加到源代码控制中,即派生的那个,而不是依赖于 msbuild 来完成它
      • 我的意思是选中项目设置中的框,以便自动生成 XML 注释文件。我已经为 Dubuffet 构建设置了这个,但不是发布版本。
      【解决方案6】:

      接受的答案应该是您尝试的第一件事。

      但是,我将 XML 输出设置为转到 App_Data\ 并将我的 Swashbuckle 配置为从该目录读取,因此,它的构建方式并不重要:xml 文件将“存在” .尽管如此,我仍然收到错误...

      我在MSDN's forums@enough2012 上找到了答案:

      在“发布”对话框的“设置”窗格中的“文件发布选项”中选择“在目标位置删除其他文件”。

      工作就像一个魅力!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        • 2021-10-17
        • 2021-07-27
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多