I am doing an http request so if I used the default self signed credentials i had issues and couldn't make the request so I override it
I am doing a post request within my local network so I have used the following code to override the behaviour to check the credentials
#if DEBUG
var httpHelper = new HttpClientHandlerHelper();
builder.Services.AddSingleton<HttpClient>(x=> new HttpClient(httpHelper.GetInsecureHandler(), false));
#else
builder.Services.AddSingleton<HttpClient>();
#endif
where it is defined as
public CustomAndroidMessageHandler GetInsecureHandler()
{
var handler = new CustomAndroidMessageHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
{
// if (cert.Issuer.Equals("CN=localhost"))
return true;
};
return handler;
}
and the Android handler
public class CustomAndroidMessageHandler : AndroidMessageHandler
{
protected override IHostnameVerifier GetSSLHostnameVerifier(HttpsURLConnection connection)
=> new CustomHostnameVerifier();
private sealed class CustomHostnameVerifier : Java.Lang.Object, IHostnameVerifier
{
public bool Verify(string hostname, ISSLSession session)
=> HttpsURLConnection.DefaultHostnameVerifier.Verify(hostname, session)
|| (hostname == "192.168.250.3" && session.PeerPrincipal.Name == "CN=localhost");
}
}
at the moment of calling httpClient.PostAsync() with the Native handler it throws
System.ObjectDisposedException: Cannot access a closed Stream.
at System.IO.MemoryStream.EnsureNotClosed()
at System.IO.MemoryStream.get_Length()
at System.Net.Http.HttpContent.GetComputedOrBufferLength()
at System.Net.Http.Headers.HttpContentHeaders.get_ContentLength()
at Xamarin.Android.Net.AndroidMessageHandler.SetupRequestBody(HttpURLConnection httpConnection, HttpRequestMessage request) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 1132
at Xamarin.Android.Net.AndroidMessageHandler.SetupRequestInternal(HttpRequestMessage request, URLConnection conn) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 984
at Xamarin.Android.Net.AndroidMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 374
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at MauiAppTest.Common.Services.ChatServicesService.CreateUser(String phoneNumber) in C:\Users\PontiacGTX\Source\Repos\MauiAppTest\Common\Services\MainService.cs:line 38}
using the HttpClientHandler
also using HttpClientHandler gives this exception System.ObjectDisposedException: Cannot access a closed Stream.
at System.IO.MemoryStream.EnsureNotClosed()
at System.IO.MemoryStream.get_Length()
at System.Net.Http.HttpContent.GetComputedOrBufferLength()
at System.Net.Http.Headers.HttpContentHeaders.get_ContentLength()
at Xamarin.Android.Net.AndroidMessageHandler.SetupRequestBody(HttpURLConnection httpConnection, HttpRequestMessage request) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 1132
at Xamarin.Android.Net.AndroidMessageHandler.SetupRequestInternal(HttpRequestMessage request, URLConnection conn) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 984
at Xamarin.Android.Net.AndroidMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 374
at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at AppTest.Common.Services.ChatServicesService.CreateUser(String phoneNumber) in C:\Users\PontiacGTX\Source\Repos\MauiAppTest\Common\Services\MainService.cs:line 38