Mimo że masz już found a solution na swoje pytanie, pomyślałem, że postaram się wyjaśnić, dlaczego nie zadziałało zgodnie z oczekiwaniami.
WebApi używa negocjacji typu treści do określenia, którego parser należy użyć do odczytu danych. Oznacza to, że będzie on patrzył na nagłówek żądania, aby dokonać ustalenia. Jeśli nagłówek Content-Type
jest ustawiony na application/json
, użyje Json.Net do przeanalizowania zawartości i podania jej do swojej metody.
Żądanie HTTP GET, takie jak tutaj, nie ma zestawu typu zawartości. "Zawartość" w tym przypadku jest po prostu ciągiem zapytania z adresu URL. WebApi nie spodziewa się znaleźć tutaj danych JSON, więc nie będzie próbował użyć parsera JSON, aby to zrozumieć. Nawet jeśli tak, ciąg znaków przekazywany do metody GetAll nie jest nawet prawidłowym JSON. (Musiałby być podany jako ważny).
Teraz, jeśli chcesz zmienić metodę akceptowania żądania POST, i ustaw nagłówek typu zawartości na application/json
i podaj datę jako ciąg JSON w Ciało, to WebApi użyje Json.Net do parsowania i będzie działać tak, jak oczekujesz.
Na przykład, powiedzmy metoda wyglądał następująco:
[HttpPost]
public object GetAll([FromBody]DateTime startDate)
{
try
{
return new
{
StartDate = startDate.ToString("yyyy-MM-dd HH:mm:ss"),
StartDateKind = startDate.Kind.ToString(),
};
}
catch (Exception ex)
{
return ex.Message;
}
}
I złożył wniosek podobny do poniższego (POST):
POST http://localhost:57524/api/values/GetAll HTTP/1.1
Content-Type: application/json
Content-Length: 22
Host: localhost:57524
"1994-11-05T17:15:30Z"
Odpowiedź będzie wyglądać następująco:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 31 May 2013 01:25:48 GMT
Content-Length: 57
{"StartDate":"1994-11-05 17:15:30","StartDateKind":"Utc"}
Jak widać, poprawnie rozpoznaje datę UTC w tym scenariuszu.
Nie możesz uzyskać czasu UTC od deserializowanej daty? –
Znaleziono rozwiązanie http://stackoverflow.com/questions/12246254/asp-net-web-api-modelbinders –