swagger-ui部署后返回500


78

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

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

500:{“消息”:“发生错误。” } / api / swagger / docs / v1

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

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

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

任何帮助将非常感激

Answers:


166

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

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


我有同样的问题。我的部署处于天蓝色状态,但仍然存在问题。stackoverflow.com/questions/39406820/...
user2128702

1
我的部署是蔚蓝的,但是我忘了简单的事情。更改项目属性也可以为发布模式创建XML文件!
Karl Gjertsen

目录应该是什么?
Zapnologica

@Zapnologica这取决于文件的位置,您告诉swagger config。
VisualBean

它对我有用,但是现在所有方法的所有响应体内都出现了完全相同的错误。“消息”:“发生错误。” 我现在应该看哪里?谢谢
约翰尼斯·文图

22

谢谢@VisualBean。

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

在项目>您的项目属性>生成选项卡中

在此处输入图片说明


10

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

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

如果第一个答案对您不起作用。使用此建议(打开自定义错误模式)来查看程序中正在发生的情况。对我来说,我意识到有人在我们的一个API控制器中引入了一个模棱两可的端点。我纠正此刻的那一刻,我们一切都很好。
Seun S. Lawal

3

如接受答案中所述,您必须确保XML文档文件输出位于bin中,而不是bin \ Debugbin \ Release中(请针对所有构建配置进行验证)。

由于使用多个XML文档文件,我仍然收到500响应。在我的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部署程序包包含其他文件?以获得完整的解释。


作为此方法的一种变体,我将自定义标记添加到了pubxml文件中,而不是按下面的链接中所述将csproj添加到了该文件中。也可以使用Include=bin\*.xml其中包含来自所有引用项目的xml,而无需明确指定它们。请参阅docs.microsoft.com/zh-cn/aspnet/web-forms/overview/deployment/…–

0

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

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


1
如果您查看接受的答案,那么您可能会明白,这就是为什么。:)
VisualBean

@VisualBean如果您推断解决方案是使用属性窗口更改以更新Output> XML之后修改csproj文件,则我不认为该解决方案对我来说是解决方案,并且我遇到了同样的问题。取而代之的是,我的调试和发行版配置完全相同,并且在XML文档文件中未指定任何内容,但是,调试版本仍会生成该文件供调试而不是发行。
jbooker

1
可接受的答案是在发行设置和调试设置中打开XML注释。
Karl Gjertsen

@KarlGjertsen,“打开XML”是什么意思?您的意思是实际上将值放在“ XML文档路径”中吗?因为这不是我的解决办法,我只想知道您是否有确凿的证据证明这是解决办法,所以这些经文只是说“解决办法是XYZ”。对我来说,解决办法是将一个文档添加到源代码管理中,而不是依赖于msbuild来进行源控制
jbooker

我的意思是选中项目设置中的复选框,以便自动生成XML注释文件。我已为Dubuffet构建设置了此设置,但未为发行版本设置。
卡尔·吉尔森

0

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

但是,我将XML输出设置为App_Data \,并已将Swashbuckle配置为从该目录读取,因此,构建方式无关紧要:xml文件将“存在”。但是,我仍然遇到错误...

我在MSDN的论坛@ enough2012的答案中找到了:

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

像魅力一样工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.