Ich sende in meinem Querystring ein UTC-Datum, z.B.Wie WebApi Querystring Parameter Bindung haben UTC-Daten zu halten?
& EndDate = 2000-01-02T03% 3a04% 3a05.0060000Z
Und mein Controller Parameter bindet es in einem komplexen Objekt, z.B.
public async Task<DocumentsRequest> GetEchoFromUriDocumentsAsync(
[FromUri] DocumentsRequest request)
{
return request;
}
Was ich herausgefunden habe ist, dass mein Objekt nach der Parameterbindung mein UTC-Datum auf ein lokales Datum + Offset ändert. Hier ist ein Ausschnitt aus meinem Testfall
[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);
}
Die oben versagt, weil der Ausgang ist:
2000-01-01T19: 04: 05.006-08: 00
Aber Die json-Serialisierung schneidet dann den Offset ab und nimmt an, dass es sich um ein UTC-Datum handelt ... und wie Sie sehen, stimmen die Daten nicht mit dem Post-Round-Trip überein.
Es gibt eine ähnliche Frage hier, aber nicht wirklich eine Antwort (das Plakat beantwortet ist eigene Frage)
Passing UTC DateTime to Web API HttpGet Method results in local time
Was ist die richtige Lösung, um dieses Problem zu lösen? Ich denke, das Problem ist, dass ich will, dass die Parameterbindung die Querystring als UTC ein Datum analysiert. Ist TypeConverter der richtige Weg? Jeder hat eine vollständige Probe, wie man das macht? Muss ich den TypeConverter für alle Attribute in allen meinen Klassen mit DateTime verwenden? Ich habe auf eine globale Konfiguration gehofft.
Danke.
Ich fand die Frage, die Sie verknüpft haben, eine gute Antwort (die erscheint, wurde vor Ihrer Frage erstellt, wurde aber nicht als die angenommene Antwort trotz t markiert Die meisten Stimmen in der Zwischenzeit): http://stackoverflow.com/a/24899562/125407 –
mögliche Duplikate von [Übergabe von UTC DateTime an Web API HttpGet Methode ergibt lokale Zeit] (http: // stackoverflow.com/questions/22581138/passing-utc-datetime-zu-web-api-httpget-methode-result-in-local-time) –