Skip to content

Commit

Permalink
Expose request, response and ElapsedTime in exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
matteocontrini committed Oct 29, 2023
1 parent 14e342e commit c4023db
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 13 deletions.
4 changes: 2 additions & 2 deletions PlainHttp/HttpRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,10 @@ public async Task<IHttpResponse> SendAsync(CancellationToken cancellationToken =
// Covers both TaskCanceledException and OperationCanceledException
if (ex is OperationCanceledException && !cancellationToken.IsCancellationRequested)
{
throw new HttpRequestTimeoutException(this, ex);
throw new HttpRequestTimeoutException(this, stopwatch.Elapsed, ex);
}

throw new HttpRequestException(this, ex);
throw new HttpRequestException(this, stopwatch.Elapsed, ex);
}
}

Expand Down
18 changes: 14 additions & 4 deletions PlainHttp/HttpRequestException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,27 @@

public class HttpRequestException : Exception
{
public HttpRequestException(HttpRequest request, Exception innerException)
public IHttpRequest Request { get; }
public IHttpResponse? Response { get; }

private readonly TimeSpan elapsedTime;
public TimeSpan ElapsedTime => Response?.ElapsedTime ?? elapsedTime;

public HttpRequestException(IHttpRequest request, TimeSpan elapsedTime, Exception innerException)
: base(CreateMessage(request, innerException), innerException)
{
this.Request = request;
this.elapsedTime = elapsedTime;
}

public HttpRequestException(string message, Exception innerException)
: base(message, innerException)
public HttpRequestException(IHttpRequest request, IHttpResponse response, Exception innerException)
: base(CreateMessage(request, innerException), innerException)
{
this.Request = request;
this.Response = response;
}

private static string CreateMessage(HttpRequest request, Exception innerException)
private static string CreateMessage(IHttpRequest request, Exception innerException)
{
return $"Failed request: [{request.ToString()}] [{innerException.Message}]";
}
Expand Down
8 changes: 4 additions & 4 deletions PlainHttp/HttpRequestTimeoutException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

public class HttpRequestTimeoutException : HttpRequestException
{
public HttpRequestTimeoutException(HttpRequest request, Exception innerException)
: base(CreateMessage(request, innerException), innerException)
public HttpRequestTimeoutException(IHttpRequest request, TimeSpan elapsedTime, Exception innerException)
: base(request, elapsedTime, innerException)
{
}

private static string CreateMessage(HttpRequest request, Exception innerException)
public HttpRequestTimeoutException(IHttpRequest request, IHttpResponse response, Exception innerException)
: base(request, response, innerException)
{
return $"Failed request: [{request.ToString()}] [{innerException.Message}]";
}
}
6 changes: 3 additions & 3 deletions PlainHttp/HttpResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ private async Task<T> ReadWrapper<T>(Func<TimeSpan, Task<T>> readFunc)
{
if (ex is TimeoutException)
{
throw new HttpRequestTimeoutException(this.Request, ex);
throw new HttpRequestTimeoutException(this.Request, this, ex);
}

throw new HttpRequestException(this.Request, ex);
throw new HttpRequestException(this.Request, this, ex);
}
finally
{
Expand Down Expand Up @@ -196,7 +196,7 @@ public void EnsureSuccessStatusCode()
}
catch (System.Net.Http.HttpRequestException ex)
{
throw new HttpRequestException(this.Request, ex);
throw new HttpRequestException(this.Request, this, ex);
}
}

Expand Down

0 comments on commit c4023db

Please sign in to comment.