gpt4 book ai didi

c# - Microsoft.AspNetCore.Odata 配置日期时间序列化以使用 Utc 或省略 Timezone

转载 作者:行者123 更新时间:2023-12-04 11:36:17 24 4
gpt4 key购买 nike

我正在使用 Microsoft.AspNetCore.Odata 7.3在 Asp.net Web Api Core 3.1 项目中。

事实证明,lib 将服务器的 TimeZone 从 Ef 输出添加到 DateTimes。

Ef 本身返回数据 DateTimeKind.Unspecified .

所以我希望 odata 库只是省略时区转换,因为 webApi 服务的行为方式是这样的。

问题是如何使odata不添加服务器的TimeZone或以utc(Z格式)返回所有内容。

试图通过 NewtonSoft serializerSettings 设置它,但它不适用于 OData 端点

services.AddOData();

services.AddMvc(options => {options.EnableEndpointRouting = false;});

services
.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});

感谢帮助!

更新:在 Ef 级别(通过 ValueConverter s)将 DateTimeKind 设置为 Utc 允许服务器将日期时间正确转换为本地。
但是日期时间仍然不是以 Z 格式返回,而是以服务器的本地时区返回。

最佳答案

我有一个类似的设置(也在 EF 层上将时间戳视为 UTC)并遇到了同样的问题。
就我而言,我能够使用以下扩展方法修复它:https://docs.microsoft.com/en-us/previous-versions/aspnet/mt135699(v=vs.118)?redirectedfrom=MSDN
示例(Startup.cs)

 app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
if (odataRoutePrefix != null && edmModel != null)
{
endpoints.EnableDependencyInjection();
endpoints.Filter().OrderBy().MaxTop(100).Count().Select();
endpoints.MapODataRoute("odata", odataRoutePrefix, edmModel);
endpoints.SetTimeZoneInfo(TimeZoneInfo.Utc);
}
});

关于c# - Microsoft.AspNetCore.Odata 配置日期时间序列化以使用 Utc 或省略 Timezone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61653550/

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