繁体   English   中英

swagger-ui 部署后返回 500

[英]swagger-ui returns 500 after deployment

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

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

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

在此处输入图片说明 部署到default web site/api

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

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

任何帮助将非常感激

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

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

谢谢@VisualBean。

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

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

在此处输入图片说明

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

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

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

我仍然收到 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>

请参阅如何使用 VS2010 Web 部署包包含其他文件? 以获得完整的解释。

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

(更新)对我来说,修复实际上是进入 .csproj 文件并添加一行以确保始终复制该文件。 差异如下所示在此处输入图片说明

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

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

我在MSDN 的论坛上找到了@enough2012 的回答:

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

像魅力一样工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM