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

标签 c# odata asp.net-core-webapi

我正在使用 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/

相关文章:

c# - QueryString.Add 不向 ASP.NET Core 中的请求查询字符串添加值

c# - 如何设置MediaElement的位置?

c# wpf 将 RichTextBox 格式导出到 xml 文档

c# - 在 WebControl 中使用 `<%=` 是个坏主意吗

rest - 执行 SharePoint Rest 调用时为 "The expression is not valid"

c# - 是否有 DataServiceContext.SaveChanges() 的任何事件或 Hook

c# - 从 WindowsPhone 8.1 调用 GetDiskFreeSpaceExW api

ssl - ODataService 类型提供程序错误 : (401) Unauthorized

asp.net-core - 我们如何将 identityserver4 和 web api 集成到同一个项目(端口)中,而不是为每个项目创建不同的项目?

c# - Core 2 在 API Controller 上授权