J'ai une application ASP .NET Web Forms qui utilise l'attribut 'WebMethod' pour effectuer des appels AJAX à partir de jQuery. Je fais face à essayer de localiser l'application, donc je récemment créé une méthode Web qui ressemble à ceci à des fins de test:Pourquoi le thread CultureInfo du thread actuel n'est-il pas utilisé lors de l'analyse d'un paramètre DateTime lors d'un appel "WebMethod" dans ASP .NET?
[WebMethod]
public static string HandleDate(DateTime dateValue)
{
return dateValue.ToString("f");
}
Le point de cette méthode est de vérifier que si je mets le CultureInfo correctement le web La méthode analysera correctement la date fournie en utilisant les règles de mise en forme de la date pour cette culture. Malheureusement, ce code n'est jamais atteint. Au lieu de cela, je vois une erreur soulevée par les classes auxiliaires qui permettent d'appeler ces WebMethods.
J'ai un HttpModule qui définit les propriétés 'CurrentCulture' et 'CurrentUICulture' du thread en cours à 'pt-BR' (portugais brésilien) à l'événement 'BeginRequest'.
Côté client, j'ai un appel jQuery AJAX à cette méthode Web 'HandleDate' qui fournit le paramètre dateValue en tant que '18/10/2010 '. Dans la culture «pt-BR», cela devrait se faire jusqu'au 18 octobre 2010 (format de date jour/mois/année). Lorsque j'exécute cela, je reçois une erreur indiquant que le 'System.Web.Script.Serialization.ObjectConverter' explose, indiquant que '18/11/2010' n'est pas une valeur valide pour DateTime. La trace de pile incluse avec l'erreur indique que cela a été lancé par la méthode 'System.ComponentModel.DateTimeCoverter.ConvertFrom', qui accepte l'objet à convertir en plus d'un objet CultureInfo représentant la culture qui doit être appliquée pendant la conversion.
J'ai démarré Reflector et il semble que le 'ObjectConverter' appelle le 'DateTimeConverter' en utilisant l'instance de CultureInfo.InvariantCulture, ce qui me semble être le problème.
Comment puis-je forcer cette logique à utiliser le CultureInfo attaché au thread actuel au lieu de l'InvariantCulture?
Je pense qu'il fait exploser en essayant de convertir '18/10/2010 'à un DateTime afin qu'il puisse être passé à la méthode, et n'a rien à voir avec votre code 'dateValue.ToString (" f ")' – Greg
Yah , le code à l'intérieur de la méthode n'est jamais réellement atteint. C'est définitivement en train de faire l'analyse de la date, mais je veux savoir pourquoi. Je vais clarifier un peu la question. –