gpt4 book ai didi

c# - QueryString 与 Body 中的 ASP.NET DateTime 序列化

转载 作者:太空狗 更新时间:2023-10-29 23:36:00 25 4
gpt4 key购买 nike

我注意到 DateTime 对象在 QueryString 和 Body 之间针对相同的值进行了不同的序列化。基础值仍然是相同的正确值,但是序列化的 QueryString 的 DateTimeKindLocal,而 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);
}

请求

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"

响应

{
"queryDateKind": "Local",
"bodyDateKind": "Utc"
}

知道这是为什么吗?是否有一个设置总是序列化为相同的 DateTimeKind

最好我不想在任何地方都使用 ToUniversalTime()ToLocalTime(),也不想使用任何自定义的 IModelBinder

最佳答案

不幸的是,事情就是这样,看看这个答案 - Passing UTC DateTime to Web API HttpGet Method results in local time

这与如何区别对待查询字符串参数和消息体、模型绑定(bind)与参数绑定(bind)有关。

您将不得不调用 .ToUniversalTime() 或实现您自己的模型绑定(bind)器来解决这个问题。

关于c# - QueryString 与 Body 中的 ASP.NET DateTime 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56113032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com