Я создаю клиент HTTP API с помощью RestSharp, и я заметил, что когда сервер возвращает код ошибки HTTP (401 Unauthorized, 404 Not Found, 500 Internal Server Error и т.д.), RestClient.Execute()
doesn ' t выдает исключение - вместо этого я получаю действительный RestResponse
с свойством null .Data
. Я не хочу вручную проверять каждый возможный код ошибки HTTP в моем клиенте API - решает ли RestSharp лучший способ передать эти ошибки моему клиентскому приложению?
Немного подробная информация. RestSharp предоставляет свойство Response.ErrorException
- если вызов RestClient.Execute<T>()
вызывает какое-либо исключение, он будет открыт через свойство ErrorException
вместо того, чтобы быть выброшенным. Их документация включает следующий пример:
// TwilioApi.cs
public class TwilioApi {
const string BaseUrl = "https://api.twilio.com/2008-08-01";
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = BaseUrl;
client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey);
request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request
var response = client.Execute<T>(request);
if (response.ErrorException != null)
{
const string message = "Error retrieving response. Check inner details for more info.";
var twilioException = new ApplicationException(message, response.ErrorException);
throw twilioException;
}
return response.Data;
}
}
Я использовал этот шаблон в своем коде, но мой сервер API возвращает 401 Unauthorized
, но свойство ErrorException по-прежнему равно null. Я вижу код Unauthorized status и сообщение об ошибке в свойствах RestResponse.StatusCode
и RestResponse.StatusDescription
, но я смущен тем, почему неавторизованный ответ не приведет к заполнению поля ErrorException
.