我注意到,DateTime对于QueryString和Body之间的相同值,对象的序列化方式不同。基础值仍然是相同的正确值,但是序列化的QueryString具有DateTimeKindof Local,而Body是Utc。
[HttpPost]
public ActionResult Post([FromQuery] DateTime queryDate, [FromBody] DateTime bodyDate)
{
var result = new
{
queryDateKind = queryDate.Kind.ToString(),
bodyDateKind = bodyDate.Kind.ToString()
};
return new ObjectResult(result);
}
Run Code Online (Sandbox Code Playgroud)
POST /api/values?queryDate=2019-05-12T00%3A00%3A00.000Z HTTP/1.1
Host: localhost:5000
Content-Type: application/json
cache-control: no-cache
"2019-05-12T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
{
"queryDateKind": "Local",
"bodyDateKind": "Utc"
}
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?是否有可能始终序列化为相同的设置DateTimeKind?
最好我不想使用ToUniversalTime()或ToLocalTime()无处不在,也没有使用任何自定义IModelBinder。
不幸的是,事情就是这样,看看这个答案 - Passing UTC DateTime to Web API HttpGet Method results in local time
它与如何不同地处理查询字符串参数和消息正文、模型绑定与参数绑定有关。
您必须调用.ToUniversalTime()或实现您自己的模型绑定器才能解决此问题。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |