【发布时间】:2021-07-03 12:40:55
【问题描述】:
我们有一个内置于 .NET 4.5.2 的 Web API 网络服务站点,我们正在尝试迁移到 .NET 5.0。
我们遇到了一个似乎很常见的问题 - 当我们将站点部署到我们的临时环境时,PUT 和 DELETE 方法都不起作用。当我们使用生成的 Swagger UI 测试它们时,我们得到 500 个错误。
注意 - 我们没有通过 VS2019 调试器在 IIS Express 中看到这些错误。
当然,我们浏览网页并找到答案:
How do you fix a 500 Server Error while running REST PUT or DELETE requests?
所以我们创建了一个 web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
</configuration>
这会导致不同的问题。
- 当我们尝试通过 VS2019 调试器在 IIS Express 中运行该站点时,出现 HTTP 500 错误,并且
- 运行站点会修改 web.config。
web.config 现在看起来像:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="WebDAV" />
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
<aspNetCore stdoutLogEnabled="false" hostingModel="InProcess" />
</system.webServer>
</configuration>
注意添加了 aspNetCore。
所以,事情就是这样。
- 我们需要它在部署到 IIS 时工作,和在本地运行时,以及
- 在构建过程中,我们不能有部分生成的源文件。我们的整个构建和版本控制系统是建立在这样的想法之上的:有些文件包含开发人员编写的代码,有些文件是在构建过程中生成的。前者我们保存版本控制,后者我们不保存。我们可以将 web.config 添加到我们的版本控制中,但如果这样做,我们不能在构建或运行期间更改其内容。
那么,我们该怎么办?
当部署在 IIS 中以及在调试时在 IIS Express 中运行时,我们如何让它工作?
我们如何处理在调试运行期间修改的 web.config?
【问题讨论】:
-
您是否尝试过获取生成的 web.config,并覆盖您提供的那个?您说在 IIS Express 中运行时遇到 500 个错误 - 您遇到的潜在错误是什么? 500 只是一个错误代码,但日志应该包含更详细的信息。
-
IIS Express 日志文件夹为空。
-
嗯,这些不是唯一的日志,是吗?您检查过 Windows 事件日志吗?将日志记录添加到您的应用程序?检查调试控制台?那些说什么?
标签: c# asp.net-core iis .net-5