/// <summary> /// Map a handler that is run on a specific condition defined by <paramref name="predicate" />. /// </summary> /// <param name="request">The <see cref="ISolidHttpRequest" /> that is being extended.</param> /// <param name="predicate">The predicate</param> /// <param name="handler">The handler to run when <paramref name ="predicate" /> returns true.</param> /// <returns>The <see cref="ISolidHttpRequest" /> so that additional calls can be chained.</returns> public static ISolidHttpRequest On(this ISolidHttpRequest request, Func <HttpResponseMessage, bool> predicate, Func <IServiceProvider, HttpResponseMessage, ValueTask> handler) { request.OnHttpResponse(async(services, response) => { if (predicate(response)) { await handler(services, response); } }); return(request); }
/// <summary> /// Expect a success status code. /// <para>If a status code in the 400 range is received, a <see cref="ClientErrorException" /> is thrown.</para> /// <para>If a status code in the 500 range is received, a <see cref="ServerErrorException" /> is thrown.</para> /// </summary> /// <param name="request">The <see cref="ISolidHttpRequest" /> that is being extended.</param> /// <returns>The <see cref="ISolidHttpRequest" /> so that additional calls can be chained.</returns> public static ISolidHttpRequest ExpectSuccess(this ISolidHttpRequest request) { request.OnHttpResponse(async(services, response) => { if (!response.IsSuccessStatusCode) { var message = await GenerateNonSuccessMessage(response); if ((int)response.StatusCode < 500) { throw new ClientErrorException(message); } else { throw new ServerErrorException(message); } } }); return(request); }
/// <summary> /// Registers an event handler that is run just after the <see cref="HttpResponseMessage" /> is receied by the <seealso cref="HttpClient" />. /// </summary> /// <param name="request">The <see cref="ISolidHttpRequest" /> that is being extended.</param> /// <param name="handler">An event handler that is run just after the <see cref="HttpResponseMessage" /> is receied by the <seealso cref="HttpClient" />.</param> /// <returns>The <see cref="ISolidHttpRequest" /> so that additional calls can be chained.</returns> public static ISolidHttpRequest OnHttpResponse(this ISolidHttpRequest request, Action <IServiceProvider, HttpResponseMessage> handler) => request.OnHttpResponse(handler.ConvertToAsync());
/// <summary> /// Registers an event handler that is run just after the <see cref="HttpResponseMessage" /> is receied by the <seealso cref="HttpClient" />. /// </summary> /// <param name="request">The <see cref="ISolidHttpRequest" /> that is being extended.</param> /// <param name="handler">An event handler that is run just after the <see cref="HttpResponseMessage" /> is received by the <seealso cref="HttpClient" />.</param> /// <returns>The <see cref="ISolidHttpRequest" /> so that additional calls can be chained.</returns> public static ISolidHttpRequest OnHttpResponse(this ISolidHttpRequest request, Func <HttpResponseMessage, ValueTask> handler) => request.OnHttpResponse(handler.Convert());