发布到 IIS 10 的 api 不反映最新代码

Posted

技术标签:

【中文标题】发布到 IIS 10 的 api 不反映最新代码【英文标题】:Published api to IIS 10 does not reflect latest code 【发布时间】:2022-01-17 15:04:54 【问题描述】:

我有一个在 IIS (v10) 服务器上运行的 ASp.NET Web api。

在我的开发环境中,特定端点按预期返回 mysql 数据库表中的所有行(在 Swagger 和客户端 UI 中)。

在发布 api 并使用新发布的文件夹更新服务器(并回收应用程序池)后,同一端点返回错误,抱怨无法将字符串识别为 DateTime:String '14/12/2021 ' 未被识别为有效的日期时间。如果我将开发前端指向已部署的 api,我会得到同样的错误。开发和部署的 api 都使用相同的数据库连接字符串(解决方案尚未上线)。

前一段时间对相关表进行了更改,将 DateTime 字段替换为 varchar 字段以存储日期的字符串表示形式。

我已经清理并重建了api项目,但没有效果。

已部署 api 中的其他端点按预期工作。

关于什么可能导致部署的 api 无法反映最新版本的代码的任何想法?

【问题讨论】:

检查您的应用程序期望的日期时间格式,如果 14/12/2021 失败,那么它可能期望美国日期格式 mm/dd/yyyy 当然会失败,因为没有第 14 个月。 【参考方案1】:

在解析您的日期时,它可能会尝试将其解析为美国日期,例如 MM/DD/YYYY,因此由于不是第 14 个月,因此它失败了。

如果您正在查看 dd/mm/yyyy 格式,请查看:

using System.Globalization;

DateTime date = DateTime.Parse(theDateVariable, CultureInfo.CreateSpecificCulture("en-GB"));

DateTime date = DateTime.ParseExact(theDateVariable, "dd/MM/yyyy", CultureInfo.InvariantCulture)

因此,并不是代码更改没有反映出来,而是代码已损坏,因此“字符串 '14/12/2021' 未被识别为有效的 DateTime”。错误。

【讨论】:

感谢您的回复。该解决方案在开发环境中按预期处理日期 - 字符串转换。当发布并部署到远程 IIS 服务器(使用与 dev 相同的数据库)时,将引发错误。正是这一点让我相信部署到远程 IIS 机器有问题 服务器上的默认文化更有可能是美国,而不是您的本地开发环境/服务器文化正确。

以上是关于发布到 IIS 10 的 api 不反映最新代码的主要内容,如果未能解决你的问题,请参考以下文章

将网站从 IIS6 迁移到 IIS 7.5 后不显示内容

错误 405 - IIS Express 10 不允许使用 CORS for Web API 的方法

IIS 上的 Angular 发布到 Asp.Net(非核心)Web Api 错误 415

将 ASP.NET Web API 部署到 IIS 服务器

在 IIS 上的 WebAPI 中访问被拒绝的命名管道

window 2003 iis 6 怎么安装php7.0正式版