Почему CultureInfo текущего потока не используется при синтаксическом анализе параметра DateTime при вызове WebMethod в ASP .NET? - PullRequest
1 голос
/ 18 ноября 2010

У меня есть приложение ASP .NET Web Forms, которое использует атрибут «WebMethod» для выполнения вызовов AJAX из jQuery.Я имею дело с попыткой локализовать приложение, поэтому недавно я создал веб-метод, который выглядит примерно так для целей тестирования:

[WebMethod]
public static string HandleDate(DateTime dateValue)
{
    return dateValue.ToString("f");
}

Смысл этого метода состоит в том, чтобы убедиться, что если я правильно установил CultureInfoвеб-метод правильно проанализирует предоставленную дату, используя правила форматирования даты для этой культуры.К сожалению, этот код никогда не достигается.Вместо этого я вижу ошибку, вызываемую вспомогательными классами, которые позволяют вызывать эти методы WebMethods.

У меня есть HttpModule, который устанавливает свойства 'CurrentCulture' и 'CurrentUICulture' текущего потока в 'pt-BR '(бразильский португальский) в событии' BeginRequest '.

На стороне клиента, у меня есть вызов JQuery AJAX для этого веб-метода' HandleDate ', который предоставляет параметр dateValue в виде '18 / 10/2010».В культуре 'pt-BR' это должно оцениваться до 18 октября 2010 г. (формат даты день / месяц / год).

Когда я выполняю это, я получаю сообщение об ошибке, указывающее, что System.Web.Script.Serialization.ObjectConverter 'взрывается, заявляя, что '18 / 11/2010' не является допустимым значением для DateTime.Трассировка стека, включенная в сообщение об ошибке, указывает, что она была сгенерирована методом System.ComponentModel.DateTimeCoverter.ConvertFrom, который принимает объект, подлежащий преобразованию, в дополнение к объекту CultureInfo, представляющему культуру, которая должна применяться во время преобразования.

Я запустил Reflector, и оказалось, что ObjectConverter вызывает «DateTimeConverter» с использованием экземпляра CultureInfo.InvariantCulture, что, по-моему, является проблемой.

Как заставить эту логику использоватьCultureInfo, прикрепленный к текущему потоку вместо InvariantCulture?

1 Ответ

1 голос
/ 18 ноября 2010

Я бы рекомендовал вам изменить тип параметра на string, а затем выполнить синтаксический анализ самостоятельно, используя DateTime.Parse или TryParse.

...