将日期从 Angular 传递到 Web API 2 的正确方法

Posted

技术标签:

【中文标题】将日期从 Angular 传递到 Web API 2 的正确方法【英文标题】:Correct Way to Pass Dates from Angular to Web API 2 【发布时间】:2016-10-23 13:09:26 【问题描述】:

我有一个 Angular 应用程序,它需要日期(仅日期而不是时间)并将它们发布到 Web API 2 REST 服务。当来自印度的人由于时区问题使用该应用程序时,我们遇到了问题。

目前,Angular 应用程序正在将日期转换为 UTC 时区的 ISO8601 格式,并将它们发送到 Web API。当在 Web API 端接收数据时,日期最终不正确。如果将 2016 年 6 月 21 日输入表格,则日期最终会变为 2016 年 6 月 20 日。所需的解决方案是将表单中输入的实际日期值设为 API 接收到的日期值。

一种建议的解决方案是将日期视为字符串而不是日期,然后只传递日期部分。这对我来说似乎是一种黑客行为,而且似乎不是“正确”的做法。

处理这种情况的正确方法是什么?

鉴于应用程序具有大量日期字段输入这一事实,是否有一种简单的方法可以针对所有日期输入值实施解决方案?

【问题讨论】:

在任何日期时间选择器控件中使用momentjs(您没有提到它是字段还是控件)。提取要发送到服务器的日期时,将其提取为 ISO8601 格式的字符串。将其发送到服务器并在服务器端使用 DateTime 对象,该对象应使用 DateKind.Utc 标志反序列化日期。对于反向将日期视为 Angular 中的字符串,webapi(使用 json.net 时)会将日期时间序列化为 ISO 表示法。 【参考方案1】:

日期格式yyyy-MM-dd 将在美国/印度被接受,因此您可以将其传递给您的 WebAPI。在发布之前在 javascript 中,您可以像这样更改日期。

$scope.MyDate = $filter('date')($scope.MyDate, 'yyyy-MM-dd', timezone);

如果你也想要时间,格式为yyyy-MM-ddTHH:mmZ

【讨论】:

问题是 4/19/2016(IST 时间)被转换为 2016-04-18T18:30:00Z(UTC 时间)。然后当 Web API 收到它时,它似乎忽略了 UTC 时区并将日期解析为 2016 年 4 月 18 日(EST 时间)。

以上是关于将日期从 Angular 传递到 Web API 2 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

从 Jquery 到 C# Web API 传递和处理英国日期格式

将php变量传递给角度

使用 Angular 6 将文件上传到 Web Api C#

如何将参数从 Angular 2 服务传递到节点 js 函数?意思是

将多个对象从Angular控制器POST到Web API 2

将 API 数据从一个组件传递到另一个组件?