Czy możesz wyjaśnić, co jest najlepszą praktyką w zarządzaniu błędami interfejsu API sieci Web. Właściwie to nie wiem, czy dobrą praktyką jest użycie polecenia catch catch do mojego żądania Api.Najlepsza praktyka w zakresie obsługi błędów za pomocą interfejsu ASP.NET Web API
public Vb.Order PostOrderItem(Vb.Order order)
{
if (OAuth.isValid(Request.Headers.GetValues("Token").Single()) != true)
{
HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);
throw new HttpResponseException(httpResponseMessage);
}
if (!ModelState.IsValid)
{
HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.BadRequest);
throw new HttpResponseException(httpResponseMessage);
}
try
{
return Vb.Document.Generate(order);
}
catch (Exception ex)
{
logger.Error(ex);
HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.BadRequest);
httpResponseMessage.Content = new StringContent(ex.Message);
throw new HttpResponseException(httpResponseMessage);
}
}
Mam przeczucie, że użycie polecenia catch catch do kodu po stronie serwera nie jest dobrą praktyką, ponieważ po prostu rejestruję moje catch i ponownie zgłaszam wyjątek.
Dziękuję za tę odpowiedź. Tylko jedno pytanie premiowe: co z elmah? Narzędzia nie były aktualizowane od tak dawna. Zgodnie z tym, co powiedziałeś, nie potrzebujemy tego więcej, prawda? –
Nadal można z niego korzystać. I to jest do użytecznego narzędzia. Jest to uzupełnienie strategii wymienionych w linkach podanych w odpowiedzi, ponieważ możesz przekazać/zarchiwizować błędy na elmah, która znajduje się na peryferiach. wtyczkowy charakter elmah pokazuje, jak skupia się on również na rozwiązywaniu zagadnień przekrojowych. – Nkosi
Co powiesz na kod 'logger.Error (ex);' w pytaniu? Załóżmy, że 'Vb.Document.Generate (order)' jest wywołaniem bazy danych i chciałbym zarejestrować wyjątek, jeśli się zdarzy. I zwróć komunikat o błędzie do odpowiedzi json. – ca9163d9