Por que a cultura do thread atual não está sendo usada ao analisar um parâmetro DateTime em uma chamada 'webMethod' no ASP .NET?

StackOverflow https://stackoverflow.com/questions/4217511

  •  26-09-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo ASP .NET Web Forms que utiliza o atributo 'webMethod' para fazer chamadas de AJAX da JQuery. Estou lidando com a tentativa de localizar o aplicativo, então criei recentemente um método da Web que se parece com isso para fins de teste:

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

O objetivo desse método é verificar que, se eu definir o CultureInfo corretamente, o método da Web analisará a data fornecida corretamente usando as regras de formatação de data para essa cultura. Infelizmente, esse código nunca está sendo alcançado. Em vez disso, estou vendo um erro sendo levantado pelas classes auxiliares que permitem que esses webMethods sejam chamados.

Eu tenho um httpmodule que está definindo as propriedades 'CurrentCulture' e 'CurrentUiculture' do tópico atual para 'PT-BR-BR' (português brasileiro) no evento 'BeginRequest'.

Lado do cliente, eu tenho uma chamada de Ajax jQuery para este método da web 'manipulado' que está fornecendo o parâmetro DateValue como '18/10/2010 '. Na cultura 'PT-BR-BR', isso deve avaliar até 18 de outubro de 2010 (formato de data dia/mês/ano).

Quando executo isso, estou recebendo um erro indicando que o 'System.Web.Script.Serialization.ObjectConverter' está explodindo que '18/11/2010 'não é um valor válido para o DateTime. O rastreamento da pilha incluído com o erro indica que isso foi jogado pelo método 'System.comPONMONDMODEL.DATETIMEcoverter.ConvertFrom', que aceita o objeto a ser convertido, além de um objeto CultureInfo que representa a cultura que deve ser aplicada durante a conversão.

Eu demiti o refletor e parece que o 'ObjectConverter' está invocando a 'DatetImeconverter' usando a instância CultureInfo.invariantculture, que eu acho que é o problema.

Como posso forçar essa lógica a usar o CultureInfo anexado ao fio atual em vez da invariante?

Foi útil?

Solução

Eu recomendaria que você altere o tipo de parâmetro para string E então faça a análise de si mesmo usando DateTime.Parse ou TryParse.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top