假设我们有一个 WCF 服务,需要一些时间DateTime
对象并使用它,我们有一个以格式发送它的客户端dd/mm/yyyy
。但是这个服务也是从 JS 调用的,它应该发送准确的DateTime
,这就是为什么它使用yyyy-MM-ddTHH:mm:ss.fffzzz
format.
是否有可能创造一种采用两种格式并且不写恶心的文化if
s like if (DateTime.TryParse(format1, out dt) || DateTime.TryParse(format2, out dt) || DateTime.TryParse(format3, out dt) || ...)
这段代码的另一个缺点是我们还必须复制它DateTimeOffset
as well
这就是 ASP.NET MVC 处理该问题的方式。我认为同样的原则也适用于使用 WCF 等其他技术实现的服务。 Web 服务使用这些约定。
ASP.NET MVC(包括 Web API)对查询字符串中传递的参数执行区域性不敏感的解析。因此,URL 中的日期必须采用通用格式 yyyy-mm-dd。表单值(或请求正文中的任何值)应采用服务器指定的格式。这意味着设置为英国文化的服务器将期望日期采用英国日期格式:dd-mm-yyyy。
为什么对 URL 中的项目执行不区分区域性的解析?
对 URL 中的项目执行区域性不敏感的解析有一个非常好的、合乎逻辑且方便的理由。想象一下,我看到一件商品正在促销,并且促销已经from
and to
URL 中的日期。如果我通过电子邮件将该链接发送给我在德国的朋友(我住在加拿大),我希望他们看到相同的页面。如果对 URL 中的日期执行文化敏感的解析,我的朋友可能会看到完全不同的销售,或者可能会看到未找到的页面 - 这不会很好。
因此,为了回答您的问题,调用 WCF 服务的客户端应以服务指定的格式向您的服务提供日期,除非日期位于 URL 中,在这种情况下,客户端应以通用格式 yyyy-mm-dd 提供日期。
另一种选择是客户端向服务提供区域性(例如,在 SOAP 标头中),并且服务在解析时将使用该区域性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)