gpt4 book ai didi

c# - AspNet Core 中 UTC 的 Http 查询参数

转载 作者:行者123 更新时间:2023-12-04 14:55:25 27 4
gpt4 key购买 nike

我遇到了一个我无法解决的问题。

我尝试在服务器端处理 UTC DateTime。

我有一个带有端点的 AspNetCore Mvc 应用程序,该端点接受可能包括 DateTimes 的查询。我希望 Mvc 了解这些日期已经在 UTC 中,而不是“再次”转换它们。

我的系统在西类牙,(UTC +2)

如果我像这样向我的 localhost 服务器发送一个 http 请求:

http://localhost:50004/api/Resources?appliesOn=2018-06-30T18:00:00.000Z

我希望将反序列化的日期时间设置为 UTC,表示与以下日期相同的日期:

DateTime.SpecifyKind(new DateTime(2018, 6, 30, 18, 0, 0), DateTimeKind.Utc)

但我可以看到 Mvc 总是将日期 2018-06-30T18:00:00.000Z 转换为两个小时后:2018-06-30 20:00:00

我试图告诉 Mvc 使用 UTC json 序列化器/反序列化器,但没有任何改变:

services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});

有没有办法在 http GET 请求中发送查询参数作为 UTC 日期时间的表示?我理解 ISO 8601 中的日期,如果它有后缀 Z,则表示“零偏移”,应该已经解释为 UTC 日期时间。为什么 Mvc 会对此进行转换并添加 2 小时偏移量?

任何澄清将不胜感激!

PS:这是我的端点,你可以看到没有什么特别的:

[HttpGet("")]
public IActionResult GetResources()
{
var displayUri = Request.GetDisplayUrl();
var requestUri = new Uri(displayUri);
var filter = _filteredRequestFactory.Create(requestUri);
var resources = _myProjection.GetResourcers(filter);
return Ok(resources);
}

最佳答案

在查询中使用 UTC 日期时间时,即使使用 ASP.NET-Core 3.1,此问题仍然存在。例如 [FromQuery].

在此github-issue也是一个很好用的模型粘合剂。

基本上你可以复制粘贴然后注册

仅适用于 Web-API Controller :

services.AddController(options => options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());

对于成熟的 MVC 管道

services.AddMvc(options => options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider());

关于c# - AspNet Core 中 UTC 的 Http 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775737/

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