【发布时间】:2020-12-04 10:16:26
【问题描述】:
当我们的 API 解析帖子值时,我发现了一个问题。这似乎只发生在实时环境中,因此在测试期间被遗漏了。
该类表示发布到 API 的内容:
public class LoginHistorySearch
{
public DateTime StartDateUtc { get; set; }
public DateTime EndDateUtc { get; set; }
}
切入核心问题,这里是作为响应返回的解析日期:
[Authorize]
[Route("Reports/LoginsByPeriod")]
public class LoginsController : ApiController
{
public HttpResponseMessage Post([FromBody] LoginHistorySearch search) {
return Request.CreateErrorResponse(HttpStatusCode.OK, search.StartDateUtc.ToString());
}
}
如果我发布这些数据(目前使用 APITester.com):
{
"StartDateUtc": "2018-01-01T00:00:00Z",
"EndDateUtc": "2020-01-01T00:00:00Z"
}
我得到这个返回:
Response Body {"Message":"01/01/0001 00:00:00"}
更奇怪的是,如果我使用 Postman 发帖,我会看到 IIS 404 错误。 谁能解释一下?
更新
- 发布到 Azure 应用服务 - 看到相同的结果
- Windows Server 使用 en-GB 语言环境(英国)
- 将 DateTime.Kind 添加到类中的 setter 以强制执行 UTC
【问题讨论】:
-
您使用任何自定义模型绑定器吗?当
CurrentCulture不正确时,我过去曾看到过类似的问题,因此可能值得检查生产系统的语言环境。 -
不是故意的。你能告诉我如何检查这个吗?我认为 ISO8601 格式无论如何都会克服任何文化设置?
标签: c# asp.net asp.net-web-api