Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
v 10.3.0
- The Library is now compatible with .NET 8 (and .NET 6).
- Removed large dependency on Microsoft.AspNetCore.Components.WebAssembly package in favour of smaller Abstractions packages, this also fixed the warning people would get using dotnet 9 that says that multiple packages including System.Text.Json are vulnerable.
- Changed various internal code style to be more consistent with .NET 8 standards (only syntax no breaking changes).
- Fixed some typos in documentation.

v.10.2.0
- Improve: GetCapturedContentAsync() will proceed even if the response has illegal content headers.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Toolbelt.Blazor
{
/// <summary>
/// Intercept all of the sending HTTP requests on a client side Blazor application.
/// Intercept all the sending HTTP requests on a client side Blazor application.
/// </summary>
public class HttpClientInterceptor : IHttpClientInterceptor
{
Expand All @@ -20,12 +20,12 @@ public class HttpClientInterceptor : IHttpClientInterceptor
public event HttpClientInterceptorEventHandler BeforeSendAsync;

/// <summary>
/// Occurs after received a response of a HTTP request. (include it wasn't succeeded.)
/// Occurs after received a response of an HTTP request. (include it wasn't succeeded.)
/// </summary>
public event EventHandler<HttpClientInterceptorEventArgs> AfterSend;

/// <summary>
/// Occurs after received a response of a HTTP request. (include it wasn't succeeded.)
/// Occurs after received a response of an HTTP request. (include it wasn't succeeded.)
/// </summary>
public event HttpClientInterceptorEventHandler AfterSendAsync;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class HttpClientInterceptorEventArgs : EventArgs
/// <summary>
/// The HttpResponseMessage object that is returned from HTTP request handler.<br/>
/// This property is available only when "AfterSend" event is fired.
/// <para>[NOTICE]<br/>Don't retrive content from the "Response.Content" property directly.<br/>
/// <para>[NOTICE]<br/>Don't retrieve content from the "Response.Content" property directly.<br/>
/// Instead, call the "GetCapturedContentAsync()" method of this event arguments object to do it.</para>
/// </summary>
public HttpResponseMessage Response { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Toolbelt.Blazor.Extensions.DependencyInjection
/// </summary>
public static class HttpClientInterceptorExtension
{
private static readonly FieldInfo HandlerField = typeof(HttpMessageInvoker).GetField("_handler", BindingFlags.Instance | BindingFlags.NonPublic);
private static readonly FieldInfo? HandlerField = typeof(HttpMessageInvoker).GetField("_handler", BindingFlags.Instance | BindingFlags.NonPublic);

/// <summary>
/// Adds a HttpClientInterceptor service to the specified Microsoft.Extensions.DependencyInjection.IServiceCollection.
Expand All @@ -22,29 +22,33 @@ public static void AddHttpClientInterceptor(this IServiceCollection services)
{
services.TryAddSingleton(services =>
{
if (HandlerField != null)
if (HandlerField == null)
{
var httpClient = default(HttpClient);
try
{
httpClient = services.GetService<HttpClient>();
}
catch (InvalidOperationException e) when (e.Source == "Microsoft.Extensions.DependencyInjection" && e.HResult == -2146233079)
{
}
return new HttpClientInterceptor();
}

if (httpClient != null)
{
httpClient.EnableIntercept(services);
}
var httpClient = default(HttpClient);

try
{
httpClient = services.GetService<HttpClient>();
}
catch (InvalidOperationException e) when (e.Source == "Microsoft.Extensions.DependencyInjection" && e.HResult == -2146233079)
{
}

httpClient?.EnableIntercept(services);

return new HttpClientInterceptor();
});

services.TryAddSingleton(services =>
{
var interceptor = services.GetService<HttpClientInterceptor>();
if (interceptor == null)
{
throw new NullReferenceException("HttpClientInterceptor is not registered. Please call AddHttpClientInterceptor() before AddHttpClientInterceptorHandler().");
}
return (IHttpClientInterceptor)interceptor;
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal class HttpClientInterceptorHandler : HttpMessageHandler

private readonly HttpMessageHandler BaseHandler;

private readonly ILogger Logger;
private readonly ILogger<HttpClientInterceptor> Logger;

public HttpClientInterceptorHandler(IServiceProvider services, HttpMessageHandler baseHandler)
{
Expand All @@ -46,7 +46,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
}
else
{
response = await (SendAsyncMethod.Invoke(this.BaseHandler, new object[] { request, cancellationToken }) as Task<HttpResponseMessage>);
response = await ((Task<HttpResponseMessage>)SendAsyncMethod.Invoke(this.BaseHandler, new object[] { request, cancellationToken }));
}
return response;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<TargetFrameworks>netstandard2.1;net6.0;net8.0</TargetFrameworks>
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(MSBuildProjectName).xml</DocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
<GeneratePackageOnBuild Condition=" '$(Configuration)' == 'Release' ">true</GeneratePackageOnBuild>
<Authors>J.Sakamoto</Authors>
<Copyright>Copyright © 2018-2022 J.Sakamoto, Mozilla Public License 2.0</Copyright>
<Copyright>Copyright © 2018-2024 J.Sakamoto, Mozilla Public License 2.0</Copyright>
<PackageLicenseUrl></PackageLicenseUrl>
<PackageProjectUrl>https://github.com/jsakamoto/Toolbelt.Blazor.HttpClientInterceptor/</PackageProjectUrl>
<Description>Intercept all of the sending HTTP requests on a client side Blazor application.</Description>
<PackageTags>blazor,http,httpclient</PackageTags>
<Version>10.2.0</Version>
<Version>10.3.0</Version>
<PackageReleaseNotes>(Please write the package release notes in "../RELEASE-NOTES.txt")</PackageReleaseNotes>
<PackageLicenseExpression>MPL-2.0</PackageLicenseExpression>
<PackageOutputPath>../_dist</PackageOutputPath>
<PackageIcon>nupkg-icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.0-preview2.20160.5" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down