Ich versuche, einen HttpError aus einer HttpResponseMessage-Nachricht zu ziehen, die möglicherweise nicht vorhanden ist. Wenn die API eine Ausnahme auslöst, wird sie als HttpError serialisiert, aber Fehler wie 404 werden nicht in diesem Format vorliegen.Lesen eines HttpError-Ergebnisses von HttpResponseMessage ohne Verwendung von Ausnahmen
Ich habe es geschafft, diesen Fehler im unten stehenden Code zu beheben, indem Sie die Ausnahme auslösen, wenn wir den HttpError nicht deserialisieren können.
Das Problem ist jetzt, ich verwende Ausnahme-getriebene Entwicklung.
Idealy Ich möchte so etwas.
var httpError = await response.Content.TryReadAsAsync<HttpError>(formatters);
if (httpError == null)
{
// Definetly not an HttpError and no exception thrown
}
Sicherlich muss das eine einfache Möglichkeit sein, den Typ des Inhalts im HttpContent zu sagen?
public static async Task<ApiResponseMessage<T>> GetApiResponseAsync<T>(this HttpResponseMessage response, IEnumerable<MediaTypeFormatter> formatters) where T : class
{
if (!response.IsSuccessStatusCode)
{
HttpError httpError;
// Exception driven programming
try
{
// Could use string?
var contentString = response.Content.ReadAsStringAsync();
// This doesn't work. Throws exception if not correct type
var contentObject = await response.Content.ReadAsAsync<object>();
var alwaysNull = contentObject as HttpError;
httpError = await response.Content.ReadAsAsync<HttpError>(formatters);
}
catch (Exception)
{
httpError = null;
}
return new ApiResponseMessage<T>
{
IsSuccess = false,
HttpError = httpError,
Response = response
};
}
return new ApiResponseMessage<T>
{
IsSuccess = true,
Result = await response.Content.ReadAsAsync<T>(formatters),
Response = response
};
}