Mam dość ogólny serwis internetowy, który odpowiada wieloma standardowymi stanami http. Jednakże zwraca różne typy według tych statusów. Jest to całkowicie poprawna implementacja REST: Dostaję encję Person o statusie 200 (OK), ale gdy wystąpi błąd, na przykład problem auth, otrzymuję 403 (Forbidden) z listą komunikatów o błędach (stwierdzenie, że token wygasł lub moje konto jest nieaktywny, itp.).Użyj RestSharp do deserializacji różnych danych wyjściowych z jednego zasobu
Niestety, używając RestSharp mogę tylko „przypisane” do jednego typu danych, które należy się spodziewać:
client.ExecuteAsync<Person>(request, (response) =>
{
callback(response.Data);
});
Jak należy przechwytywać komunikaty o błędach, gdy stan jest inny niż 200? Oczywiście, mógłbym to zrobić ręcznie i zdywersyfikować zawartość odpowiedzi samodzielnie, ale myślę, że powinien istnieć jakiś czystszy, lepszy sposób, aby to osiągnąć. Chciałbym użyć czegoś takiego:
client.ExecuteAsync<Person, ErrorList>(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
Callback(response.Data);
}
else if (response.StatusCode == HttpStatusCode.OK)
{
ErrorCallback(response.Errors);
}
});
Więc w zasadzie to deserializacji ręcznie. Jednak metoda rozszerzenia jest dobrym wyborem, nie myślałem o tym. – jacek
Więc to zakłada, że twój interfejs API zwraca JSON w postaci tablicy danych i błędów? –