当前位置: 首页 > 面试题库 >

将UTC DateTime传递到Web API HttpGet方法将导致本地时间

高迪
2023-03-14
问题内容

我正在尝试将UTC日期作为查询字符串参数传递给Web API方法。网址看起来像

/api/order?endDate=2014-04-01T00:00:00Z&zoneId=4

该方法的签名看起来像

[HttpGet]
public object Index(int zoneId, DateTime? endDate = null)

日期是,31/03/2014 8:00:00 PM但我希望日期是01/04/2014 12:00:00 AM

JsonFormatter.SerializerSettings看起来像这样

new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    DateFormatHandling = DateFormatHandling.IsoDateFormat
};

编辑#1:我注意到我发布时2014-04-01T00:00:00Z,它将序列化为C#中的UTC
DateTime类型。但是endDate.Value.ToUniversalTime(),尽管我发现它对POST(而不是GET)的工作方式很奇怪,但是我发现可以进行转换。


问题答案:

您要发送的查询字符串参数值2014-04-01T00:00:00Z是UTC时间。因此,相同的内容将根据您的本地时钟转换为时间,如果您调用ToUniversalTime(),它将转换回UTC。

那么,到底是什么问题?如果问题是如果作为查询字符串发送而不是在请求正文中发送时为什么会发生这种情况,那么该问题的答案是ASP.NET Web API使用
模型绑定 将URI路径,查询字符串等 绑定 ,而主体使用 参数绑定
。对于后者,它使用媒体格式化程序。如果发送JSON,则使用JSON媒体格式化程序,它基于JSON.NET。

由于您已指定DateTimeZoneHandling.Utc,因此它将使用该设置,并获得所需的日期时间类型。顺便说一句,如果将此设置更改为DateTimeZoneHandling.Local,那么您将看到与模型绑定相同的行为。



 类似资料:
  • 我是反应性编程概念的新手。我正在学习“学习Spring Boot2.0”,所描述的简单概念/示例是可以理解的。但是我不知道如何在更复杂的用例中使用mono/flux。spring boot,mongo和project reactor的一些例子 我的模型

  • 我正在为webste构建一个功能,用户可以在其中重置密码。他收到一封电子邮件,其中包含URL中生成的令牌。单击此链接时,用户将被发送到/Reset页面。该页的Get方法如下:

  • 问题内容: 我有几个超链接,每个超链接都附有一个ID。当我单击此链接时,我想打开一个模式,并将此ID传递给模式。我在Google上进行了搜索,但找不到任何可以帮助我的东西。 这是代码: 哪个应该打开: 使用这段代码: 但是,当我单击超链接时,没有任何反应。当我提供超链接时,模式可以很好地打开,但是它不包含任何数据。 我遵循以下示例:如何将值参数传递给Bootstrap中的modal.show()函

  • 我有几个超链接,每个都有一个ID附加。当我单击这个链接时,我想打开一个模态(http://twitter.github.com/bootstrap/javascript.html#modals),并将这个ID传递给模态。我在谷歌上搜索,但我找不到任何可以帮助我的东西。 这是代码: 该窗口应打开: 用这段代码: 然而,当我点击超链接时,什么也没有发生。当我给出超链接时,模式打开得很好,但它不包含任何

  • 打印板到控制台: 我希望用户对RaisedButton的选择显示一个“X”,而计算机的选择显示一个“O”。

  • 我试图将一个字符串和一个列表传递给pandas.isin()方法。下面是我的代码 这里的问题是,.isin([])对于字符串的每次迭代都很好,但是当我到达overall_months[-1]时,它是一个列表,您不能将列表传递到.isin([])语法中。我试过了,但不能删除双引号,因为我的理解是字符串是不可变的: 有什么最好的帮助来完成这件事吗?