Sto inviando il mio querystring una data UTC, ad es.Come mantenere il binding dei parametri queryys di WebApi per mantenere le date UTC?
& EndDate = 2000-01-02T03% 3a04% 3a05.0060000Z
E mia parametro regolatore vincola in un oggetto complesso, ad esempio
public async Task<DocumentsRequest> GetEchoFromUriDocumentsAsync(
[FromUri] DocumentsRequest request)
{
return request;
}
Quello che sono riuscito a capire è che il mio oggetto dopo il binding dei parametri, cambia la mia data UTC in una data locale + offset. Ecco un frammento del mio banco di prova
[TestMethod]
public void Should_generate_querystring_and_parameter_bind_correctly()
{
DocumentsRequest request = DocumentRequestBuilder.DocumentsRequest();
string queryString = ReflectionQueryStringConverter.ToQueryString(request);
string baseUrl = "http://baseUrl/Test/EchoFromUriDocuments";
string uri = baseUrl + queryString;
HttpResponseMessage response = _client.GetAsync(uri).Result;
string outputString = response.Content.ReadAsStringAsync().Result;
JsonSerializer<DocumentsRequest> serializer =
new JsonSerializer<DocumentsRequest>();
DocumentsRequest output = serializer.DeserializeFromString(outputString);
output.EndDate.Should().Be(request.EndDate);
}
È possibile che questo sta fallendo perché l'output è:
2000-01-01T19: 04: 05.006-08: 00
Ma , la serializzazione json quindi tronca l'offset e presuppone che sia la data UTC ... e come puoi vedere, le date non corrispondono al post-round-trip.
C'è una domanda simile qui, ma non è davvero una risposta (il manifesto rispondere è proprio questione)
Passing UTC DateTime to Web API HttpGet Method results in local time
Qual è la soluzione giusta per risolvere questo problema? Penso che il problema è che voglio che il parametro binding per analizzare la querystring come una data UTC. TypeConverter è la strada da percorrere? Qualcuno ha un esempio completo di come farlo? Dovrei usare il TypeConverter su tutti gli attributi su tutte le mie classi con DateTime? Speravo in una configurazione globale di sorta.
Grazie.
Ho trovato la domanda che hai collegato ha una buona risposta (che appare creata prima della tua domanda, ma non è stata contrassegnata come risposta accettata nonostante abbia t più vota nel frattempo): http://stackoverflow.com/a/24899562/125407 –
possibile duplicato di [Passing UTC DateTime in Web API HttpGet Metodo risultati in ora locale] (http: // stackoverflow.it/questions/22581138/passing-utc-datetime-to-web-api-httpget-method-results-in-local-time) –