开箱即用的配置在我的机器上完美运行,完全没有问题 .
但是当我部署到我们的测试环境时 - 我收到以下消息
500:{“消息”:“发生错误 . ” / api / swagger / docs / v1
部署是 default web site/api
default web site/api
我猜它与baseUrl或类似的东西有关,但我不知道哪里开始 .
我的路线在项目中运行良好 - 我可以调用我的所有webapi endpoints ,并且它们可以正确响应 .
任何帮助将非常感激
由于web.config中的customErrors设置,Swashbuckle隐藏了真正的错误消息 . 如果将customErrors设置为off,则应获得更好的错误消息 .
<system.web> <customErrors mode="Off"/> </system.web>
在调试时我使用的是调试配置(我为其生成了XmlComments:属性 - >构建选项卡 - >输出 - > XML文档文件)
我没有为我的发布配置做这个(呃...) - 现在一切正常
如接受的答案中所述,您必须确保XML文档文件输出位于bin而不是bin \ Debug或bin \ Release(对所有构建配置验证这一点) .
我仍然得到500响应,因为我使用多个XML文档文件 . 在我的SwaggerConfig实现中,我包含来自两个项目的XML文档文件(WebApi项目本身和WebApi项目引用的类库):
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文档文件不是(即使它出现在 compiled 项目的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? .
问题是使用 -r Release 运行 dotnet publish 不会生成XML文件 . 但是, dotnet publish 与 -r Debug 实际上确实生成了该文件 . 这解释了为什么人们只是在部署到本地以外的环境时才会遇到这个问题,然后在发现异常只发生在prod上时自己踢它 . (它的发布)为了重新编程,只需在本地运行这些命令并查看输出目录,你应该看到问题 .
-r Release
dotnet publish
-r Debug
(更新)我的修复是实际进入.csproj文件并添加一行以确保文件始终被复制 . 差异如下所示
接受的答案应该是你尝试的第一件事 .
但是,我将我的XML输出设置为App_Data \并将我的Swashbuckle配置为从该目录读取,因此,构建它的方式无关紧要:xml文件将“存在” . 不过,我还是得到了错误......
我找到MSDN's forums @ enough2012的答案:
在“发布”对话框的“设置”窗格中的“文件发布选项”中选择“删除目标位置的其他文件” .
像魅力一样工作!
5 回答
由于web.config中的customErrors设置,Swashbuckle隐藏了真正的错误消息 . 如果将customErrors设置为off,则应获得更好的错误消息 .
在调试时我使用的是调试配置(我为其生成了XmlComments:属性 - >构建选项卡 - >输出 - > XML文档文件)
我没有为我的发布配置做这个(呃...) - 现在一切正常
如接受的答案中所述,您必须确保XML文档文件输出位于bin而不是bin \ Debug或bin \ Release(对所有构建配置验证这一点) .
我仍然得到500响应,因为我使用多个XML文档文件 . 在我的SwaggerConfig实现中,我包含来自两个项目的XML文档文件(WebApi项目本身和WebApi项目引用的类库):
WebApi项目的XML文档文件已正确发布到站点的bin文件夹,但引用项目的XML文档文件不是(即使它出现在 compiled 项目的bin文件夹中) .
因此,您需要在文本编辑器中修改WebApi项目文件(.csproj),并在底部添加以下部分(替换ReferencedProject):
有关完整说明,请参阅How do you include additional files using VS2010 web deployment packages? .
问题是使用
-r Release
运行dotnet publish
不会生成XML文件 . 但是,dotnet publish
与-r Debug
实际上确实生成了该文件 . 这解释了为什么人们只是在部署到本地以外的环境时才会遇到这个问题,然后在发现异常只发生在prod上时自己踢它 . (它的发布)为了重新编程,只需在本地运行这些命令并查看输出目录,你应该看到问题 .(更新)我的修复是实际进入.csproj文件并添加一行以确保文件始终被复制 . 差异如下所示
接受的答案应该是你尝试的第一件事 .
但是,我将我的XML输出设置为App_Data \并将我的Swashbuckle配置为从该目录读取,因此,构建它的方式无关紧要:xml文件将“存在” . 不过,我还是得到了错误......
我找到MSDN's forums @ enough2012的答案:
像魅力一样工作!