我最近将 WEB API 添加到现有的 VS 桌面应用程序并且一切正常,直到昨天我不得不添加一个采用三个参数的 GET 方法,其中一个是日期。 好吧,一开始我以为那是小菜一碟,但令我惊讶的是,当我在安装应用程序的服务器上发送 2014/07/09(7 月 9 日)时,它被视为 2014/09/07(9 月 7 日),因此我所有的比较都没有奏效。
我已经尝试过诸如从 GET 方法更改为 POST 方法、将我的区域和语言选项设置更改为服务器上的相同设置、将日期作为字符串传递、使用以下部分在服务器上创建 Datetime 对象等操作字符串。不幸的是,它们都不起作用。
然后我记得这个桌面应用程序在其 WCF 项目(我现在将其传递给 Web API)中有一些方法可以毫无问题地传递日期。查看代码一段时间后,我发现他们在使用日期的 WCF 项目的每个类上都使用了类似的东西:
Imports System.Globalization
Imports System.Security.Permissions
Imports System.Threading
Public Class ServicioRemotoVentas
Implements IServicioRemotoVentas
Public Sub New()
MyBase.New()
Thread.CurrentThread.CurrentCulture = New CultureInfo("es-PE", False)
End Sub
当然,这个 Thread.CurrentThread.CurrentCulture = New CultureInfo("es-PE", False) 一定是为了某些东西而存在的。 现在我想知道您以前是否在 Web API 中使用过类似的东西?如果是的话,你是如何以及在哪里放置这样的配置的。
这些是我电脑上的设置:
这些是服务器设置:
我差点忘了提一下,我使用 yyyy/M/d 格式传递所有日期,并使用 json 传递所有其他参数。 可能是因为我没有指定要使用的文化信息,所以当字符串在 Web API 中反序列化时,这是使用系统日期格式完成的吗?或者在尝试序列化/反序列化日期时可能是 Json 错误??
一如既往,我们将不胜感激您提供的任何建议或资源。
最佳答案
如评论中所述,ASP.NET 运行时确实有针对这些情况的解决方案:它是 web.cofig
元素 <globalization>
- (参见 MSDN <globalization>
Element)
它的结构定义为:
<configuration>
<system.web>
<globalization
enableClientBasedCulture="true|false"
requestEncoding="any valid encoding string"
responseEncoding="any valid encoding string"
fileEncoding="any valid encoding string"
responseHeaderEncoding = "any valid encoding string"
resourceProviderFactoryType = string
enableBestFitResponseEncoding = "true|false"
culture="any valid culture string"
uiCulture="any valid culture string"/>
因此,以防万一,我们想要强制服务器/开发工作站在 en-US
中运行我们应该使用这些显式设置的文化:
<globalization
enableClientBasedCulture="false"
uiCulture="en-US"
culture="en-US" />
这将为任何 http 请求使用适当的(期望的和设置的)文化。
默认设置概述也很有趣:
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
fileEncoding=""
culture=""
uiCulture=""
enableClientBasedCulture="false"
responseHeaderEncoding="utf-8"
resourceProviderFactoryType=""
enableBestFitResponseEncoding="false" />
在这里也可以看到类似的:
关于c# - 如何在 Asp.net Web API 中使用特定的 CultureInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24690879/