AshleyMedway / MailJet.NET

.NET Client for MailJet
MIT License
8 stars 11 forks source link

SendMessage is not throwing http errors #28

Open mpiliszcz opened 7 years ago

mpiliszcz commented 7 years ago

When network issues occur, e.g. no network connection, the low level error code is not returned. This could be the solution:

    private SentMessageData SendMessage(RestRequest request)
    {
        request.RequestFormat = DataFormat.Json;
        request.JsonSerializer = NewtonsoftJsonSerializer.Default;

        var result = WebClient.Execute(request);

        if (result.ResponseStatus == ResponseStatus.Completed && (result.StatusCode == HttpStatusCode.NoContent))
            return null;

        if (result.ResponseStatus == ResponseStatus.Completed && result.StatusCode == HttpStatusCode.Unauthorized)
            throw new UnauthorizedAccessException("MailJet returned an HTTP 401 exception, please check your credentials");

        if (result.ResponseStatus == ResponseStatus.Completed && result.StatusCode >= HttpStatusCode.BadRequest)
            throw new HttpException((int)result.StatusCode, result.StatusCode.ToString());

        if (result.ErrorMessage != null && String.IsNullOrWhiteSpace(result.Content))
        {
            throw new Exception(result.ErrorMessage);
        }
        else
        {
            var error = JsonConvert.DeserializeObject<ErrorResponse>(result.Content);
            if (!String.IsNullOrWhiteSpace(error.ErrorInfo) || !String.IsNullOrWhiteSpace(error.ErrorMessage))
                throw new Exception(String.Format("{0}\n{1}", error.ErrorMessage, error.ErrorMessage));
        }

        var data = JsonConvert.DeserializeObject<SentMessageData>(result.Content);
        return data;
    }