部署后 swagger-ui returns 500

swagger-ui returns 500 after deployment

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

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

500 : { "Message": "An error has occurred." } /api/swagger/docs/v1

部署到 default web site/api

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

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

任何帮助将不胜感激

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

我没有为我的发布配置执行此操作(呃......) - 现在一切正常

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

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

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

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

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

但是,我将我的 XML 输出设置为转到 App_Data\ 并将我的 Swashbuckle 配置为从该目录读取,因此,它的构建方式无关紧要: xml 个文件将 'be there'。尽管如此,我仍然收到错误...

我在 MSDN's forums @enough2012 的回答中找到了:

select "Remove additional files at destination" in the "File Publish Options" within the "Settings" pane of the Publish dialog.

工作得很好!

如接受的答案所述,您必须确保 XML 文档文件输出在 bin 而不是 bin\Debug bin\Release(针对所有构建配置验证这一点)。

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

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?

谢谢@VisualBean。

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

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