发布到 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 不反映最新代码的主要内容,如果未能解决你的问题,请参考以下文章
错误 405 - IIS Express 10 不允许使用 CORS for Web API 的方法