假设我们有一个WCF服务,它接受一些DateTime
对象并使用它,我们有一个客户端以格式dd/mm/yyyy
发送它。但是这个服务也是从JS调用的,它应该发送准确的DateTime
,这就是它使用yyyy-MM-ddTHH:mm:ss.fffzzz
格式的原因。
是否有可能创建一种文化,它采用两种格式,并且不会像if
那样令人厌恶if (DateTime.TryParse(format1, out dt) || DateTime.TryParse(format2, out dt) || DateTime.TryParse(format3, out dt) || ...)
此代码的另一个缺点是我们还必须为DateTimeOffset
复制
答案 0 :(得分:2)
这是ASP.NET MVC处理问题的方式。我认为相同的原则适用于使用其他技术(如WCF)实现的服务。这些约定由Web服务使用。
ASP.NET MVC(包括Web API)对查询字符串中传递的参数执行区分大小写的解析。因此,URL中的日期必须采用通用格式yyyy-mm-dd。表单值(或请求正文中的任何值)应采用服务器指定的格式。这意味着设置为英国文化的服务器将预期日期为英国日期格式:dd-mm-yyyy。
为什么对URL中的项目执行文化不敏感的解析?
对URL中的项目执行不区分大小写的解析有一个非常好,合乎逻辑且方便的原因。想象一下,我看到一个待售商品,并且该商品在网址中有from
和to
个日期。如果我通过电子邮件将该链接发送给我在德国的朋友(我住在加拿大),我希望他们看到同一页面。如果在URL中的日期执行了对文化敏感的解析,我的朋友可能会被呈现出完全不同的销售,或者可能会出现一个未找到的页面 - 这将不会很好。
所以为了回答你的问题,调用你的WCF服务的客户端应该以服务指定的格式向你的服务提供日期,除非日期在URL中,客户端应该以通用格式提供它yyyy- MM-DD。
另一个选择是客户端为服务提供文化,例如,在SOAP标头中,服务将在解析时使用该文化。