我正在尝试将请求从服务器发送到在特定文化环境中运行的client(.Net),这会影响日期在特殊时区中。

我正在使用未指定的类型从服务器发送日期,以避免在客户端检索到该日期时将其转换。 基本上我只是在服务器端这样转换它:

DateTime dateToSend = DateTime.SpecifyKind(serverSideDate, DateTimeKind.Unspecified);

问题是,当对客户端使用JsonProtocol时,日期未得到转换且未得到正确处理,而对于MessagePackProtocol ,客户端和服务器端的相同代码的工作方式完全不同-将日期转换为客户端上特定于文化的时区。 。

如何防止这种转换,而没有一些黑客解决方案,例如将日期作为字符串传递。

更新:
正如Shaun所建议的那样,我已经以这种方式在客户端和服务器端都配置了MessagePack,但不幸的是,它仍然无法正常工作:

.AddMessagePackProtocol(options =>
    options.FormatterResolvers = new List<MessagePack.IFormatterResolver>()
    {
        StandardResolver.Instance,
        NativeDateTimeResolver.Instance
    })

#1楼 票数:4 已采纳

问题是MessagePackProtocol丢失了那种

DateTime被序列化为MessagePack Timestamp格式,它对UTC进行序列化/反序列化,并丢失Kind信息。

该注释继续说明我们可以通过使用NativeDateTimeResolver来更改它(尽管有一些限制)。

如果使用NativeDateTimeResolver序列化了本机DateTime二进制格式,则它可以保留Kind信息,但不能与其他平台进行通信。

正如Chris和Panagiotis所提到的,最好使用DateTimeOffset Microsoft的官方文档说

对于应用程序开发,应将DateTimeOffset视为默认日期和时间类型。

比较StackTime和DateTimeOffset时 ,StackOverflow上还有很多有用的信息。

  ask by Grigoryants Artem translate from so

未解决问题?本站智能推荐:

1回复

ASP.NET Core SignalR中的客户端生命周期事件

我目前正在将一个项目从ASP.NET SignalR 2.2.3 (OWIN)升级到ASP.NET Core SignalR 1.0.2 (Kestrel)。 SignalR 2.2.3支持多个客户端生命周期事件,如reconnecting , connectionSlow , state
1回复

关闭/断开 ASP.NET Core signalR 客户端连接的正确方法是什么?

我是一个新用户,正在努力从 ASP.NET Core Blazor 服务器页面优雅地关闭辅助 signalR 客户端。 我在 Blazor 服务器页面的第一次渲染时设置了一个辅助的 signalR 客户端连接。 当通过浏览器选项卡关闭页面时,我试图关闭此辅助 signalR 客户端连接。 在撰写
1回复

ASP.NET Core 3.1 SignalR连接但不起作用

我正在将ASP.NET Web API 2服务迁移到ASP.NET Core 3.1 Web API,并且已经解决了所有依赖关系和问题,但是没有获得SignalR。 奇怪的事情: 我可以连接,但收到任何消息: chrome控制台连接 关于此连接的id始终为0(在asp.net框架中,始终是
1回复

SignalR/NetCore3.1/React.Js ~/negotiate?negotiateVersion=1 404(未找到)(相信其 CORS 问题)

继续在下面收到此错误: localhost:3000/negotiate?negotiateVersion=1 404 (Not Found) 错误:无法完成与服务器的协商:错误:未找到错误:无法启动连接:错误:未找到 这是软件版本 - - - - -客户 - - - - 这是我的
1回复

AspNetCore.SignalR SendAsync不在OnConnectedAsync内部触发

我遇到一个问题,无论何时有人连接到集线器,我都想将事件发送到前端,但是前端未收到通知。 我认为直接从中心调用方法与利用IHubContext调用方法之间可能会感到困惑。 我找不到与这些版本有关的太多信息,因此将不胜感激您的帮助! 套件版本: 这是我的示例Hub: 现在,
1回复

connection.closed不是SignalR的功能

我对SignalR的关闭事件感到困惑。 显然,有一些关于如何称之为例如onClosed() , closed()等的争论。 在客户端的SignalR监听器中,我正在尝试实现此事件,但我不断收到错误消息,说明它不是函数。 我试过onClosed()和closed() 。 同样的错误。
1回复

signalR 未定义 - 无法在 aspnet 核心 Web 应用程序中解析 signalR

我不明白为什么我似乎无法在我的 aspnet 核心应用程序中解析 SignalR 客户端库。 我已经包含了在 index.html 中引用的库,但是当 javascript 库没有看到引用时。 使用 VS2019 和 .net core 3.0 创建了一个默认的 react 项目https://g
1回复

带有 MessagePack 的 SignalR .Net 客户端 - IHubConnectionBuilder 中无法识别 AddMessagePackProtocol 方法

新用户,正在尝试学习 SignalR 和 Blazor Server,希望有人可以帮助解决此查询。 努力让 SignalR .NET 客户端在 Blazor 服务器页面中使用MessagePack协议。 .csproj 安装包 最初我安装了 3.1.8 的 SingalR Client 和