C# HttpClient löst zufällig eine System.NullReferenceException ausC#

Ein Treffpunkt für C#-Programmierer
Guest
 C# HttpClient löst zufällig eine System.NullReferenceException aus

Post by Guest »

Ich versuche, einen Drittanbieter anzurufen, um eine Authentifizierungszeichenfolge zu erhalten, damit ich einen zweiten Anruf tätigen kann, aber gelegentlich erhalte ich die folgende Fehlermeldung:
Image

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:
Dies scheint zufällig zu sein und tritt auch bei anderen HttpClient-Aufrufen auf, die ich mache. Ich injiziere den HTTPClient in Abhängigkeit und frage mich, ob ich es vielleicht falsch mache (ziemlich neu in C#).
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);
});
IPart3rdClient.cs

Code: Select all

namespace MyApiService.Clients.Interfaces
{
public interface IParty3rdClient
{
public Task GetAuthentication(AuthFields authFields);
}
}
3rdPartClient.cs

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;
}
}
}
Übersehe ich etwas in der HTTP-Client-Konfiguration? Muss ich beim Einfügen des HttpClient noch etwas tun? Oder handelt es sich lediglich um einen IDE-Fehler (ich habe diesen Code noch nicht bereitgestellt, daher habe ich keine Ahnung, dass dies außerhalb der IDE auftreten würde).
Interessant ist, dass dies nicht immer auftritt...

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post