swagger-ui部署后返回500

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

但是当我部署到我们的testing环境时 – 我收到以下消息

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

在这里输入图像说明 部署到default web site/api

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

我的路线在项目中工作正常 – 我可以打电话给我所有的webapi端点,他们正确地响应。

任何帮助将非常感激

debugging时,我正在使用debuggingconfiguration(我已经生成了XmlComments:属性 – >生成选项卡 ​​- >输出 – > XML文档文件)

我没有这样做我的发布configuration(呃…) – 现在一切正常

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

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

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

(更新)我修补程序实际上是进入.csproj文件,并添加一行,以确保该文件被复制总是。 差异如下所示 在这里输入图像说明

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

不过,我把我的XML输出设置为App_Data \并将我的Swashbuckleconfiguration为从该目录读取,因此,构build它的方式并不重要:xml文件将“在那里”。 不过,我仍然得到错误…

我在MSDN的论坛上find了@ enough2012的答案:

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

像魅力一样工作!

正如接受的答案中所述,您必须确保XML文档文件输出位于bin中,而不是bin \ Debugbin \ Release (针对所有构buildconfigurationvalidation此内容)。

我仍然得到了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),并在底部添加以下部分(replaceReferencedProject ):

 <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部署程序包添加其他文件? 为完整的解释。