我有一个 ASP .NET Web 窗体应用程序,它利用“WebMethod”属性从 jQuery 进行 AJAX 调用。我正在尝试本地化应用程序,因此我最近创建了一个看起来像这样的 Web 方法,用于测试目的:
[WebMethod]
public static string HandleDate(DateTime dateValue)
{
return dateValue.ToString("f");
}
此方法的目的是验证如果我正确设置 CultureInfo,Web 方法将使用该文化的日期格式规则正确解析提供的日期。不幸的是,永远无法达到此代码。相反,我看到允许调用这些 WebMethods 的帮助程序类引发错误。
我有一个 HttpModule 在“BeginRequest”事件中将当前线程的“CurrentCulture”和“CurrentUICulture”属性设置为“pt-BR”(巴西葡萄牙语)。
客户端,我对这个“HandleDate”网络方法进行了 jQuery AJAX 调用,该方法将 dateValue 参数提供为“18/10/2010”。在“pt-BR”文化中,这应该评估为 2010 年 10 月 18 日(日/月/年日期格式)。
当我执行此操作时,我收到一条错误消息,指出“System.Web.Script.Serialization.ObjectConverter”正在爆炸,指出“18/11/2010”不是 DateTime 的有效值。错误中包含的堆栈跟踪表明这是由“System.ComponentModel.DateTimeCoverter.ConvertFrom”方法引发的,该方法除了接受表示应在转换期间应用的文化的 CultureInfo 对象外,还接受要转换的对象。
我启动了 Reflector,似乎“ObjectConverter”正在使用 CultureInfo.InvariantCulture 实例调用“DateTimeConverter”,我认为这是问题所在。
如何强制此逻辑使用附加到当前线程的 CultureInfo 而不是 InvariantCulture?