
Der Inhalt davon ist:
Code: Select all
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=System.Net.Http
StackTrace:
at System.Net.Http.HttpConnection.WriteAsciiString(String s)
at System.Net.Http.HttpConnection.WriteHeaderCollection(HttpHeaders headers, String cookiesFromContainer)
at System.Net.Http.HttpConnection.WriteHeaders(HttpRequestMessage request, HttpMethod normalizedMethod)
at System.Net.Http.HttpConnection.d__57.MoveNext()
at System.Net.Http.HttpConnection.d__57.MoveNext()
at System.Net.Http.HttpConnectionPool.d__89.MoveNext()
at System.Net.Http.DiagnosticsHandler.d__10.MoveNext()
at System.Net.Http.Metrics.MetricsHandler.d__5.MoveNext()
at System.Net.Http.RedirectHandler.d__4.MoveNext()
at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.d.MoveNext()
at Microsoft.Extensions.ServiceDiscovery.Http.ResolvingHttpDelegatingHandler.d__4.MoveNext()
at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.d.MoveNext()
at System.Net.Http.HttpClient.d.MoveNext()
at MyApiService.Clients.Party3rdClient.d__7.MoveNext() in Party3rdClient.cs:
So sieht der Code aus (die Namen wurden geändert, um die Unschuldigen zu schützen):< /p>
Program.cs
Code: Select all
builder.Services.Configure
(builder.Configuration.GetSection("Party3rdSettings"));
builder.Services.AddTransient();
builder.Services.AddHttpClient(client =>
{
client.Timeout = TimeSpan.FromMinutes(5);
});
Code: Select all
namespace MyApiService.Clients.Interfaces
{
public interface IParty3rdClient
{
public Task GetAuthentication(AuthFields authFields);
}
}
Code: Select all
namespace MyApiService.Clients
{
public class Part3rdClient: IPart3rdClient
{
private readonly Party3rdSettings _party3rdSettings;
private readonly HttpClient _client;
private static string Authentication = string.Empty;
private static readonly JsonSerializerOptions jsonOptions = new ()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
public Part3rdClient(IOptions
party3rdSettings, HttpClient client)
{
_party3rdSettings= party3rdSettings.Value;
_client = client;
}
public async Task GetAuthentication(AuthFields authFields)
{
try
{
using var request = new HttpRequestMessage(HttpMethod.Post, party3rdSettings.AuthConnectionString);
var authenticationString = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{party3rdSettings.UserName}:{party3rdSettings.Password}"));
_client.DefaultRequestHeaders.Clear();
var base64EncodedAuthenticationString = Convert.ToBase64String(Encoding.ASCII.GetBytes(authenticationString));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authenticationString);
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string body = JsonSerializer.Serialize(authFields, jsonOptions);
request.Content = new StringContent(body, Encoding.UTF8, "application/json");
HttpResponseMessage response = await _client.SendAsync(request);
if (response != null && response.IsSuccessStatusCode)
{
Debug.WriteLine("Authenticating 3rd Party. Successful!");
return await response.Content.ReadAsStringAsync();
}
else if (response != null)
{
Debug.WriteLine("Error Authenticating 3rd Party. HttpStatusCode: " + response.StatusCode + ", message: " + response.RequestMessage);
return "Unauthorized";
}
}
catch (HttpRequestException e)
{
Debug.WriteLine("3rd Party GetAuthentication() Exception :{0} ", e.Message);
}
catch (Exception ex)
{
Debug.WriteLine("3rd Party GetAuthentication() Exception :{0} ", ex.Message);
}
return string.Empty;
}
}
}
Interessant ist, dass dies nicht immer auftritt...