HttpClient BaseAddress ist im Blazor-Projekt manchmal nullC#

Ein Treffpunkt für C#-Programmierer
Guest
 HttpClient BaseAddress ist im Blazor-Projekt manchmal null

Post by Guest »

Ich habe derzeit ein neues Projekt mit Blazor gestartet und verwende den automatischen Rendermodus global. Die Struktur besteht standardmäßig aus zwei Projekten: dem Server- und dem Client-Projekt. Ich habe im Client eine einfache Anmeldeseite erstellt, die mithilfe eines HttpClient eine API vom Server aufruft, um den Benutzer anzumelden. Die BaseAddress wird sowohl im Server- als auch im Client-Programm Program.cs:
Server Program.cs:
festgelegt

Code: Select all

builder.Services.AddHttpClient("ServerHttpClient", client =>
{
client.BaseAddress = new Uri(builder.Configuration["MainDomain"]!);
});
Client Program.cs:

Code: Select all

var builder = WebAssemblyHostBuilder.CreateDefault(args);

Console.WriteLine($"The BaseAddress is: {builder.HostEnvironment.BaseAddress}");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

await builder.Build().RunAsync();
Und wie die Anfrage gestellt wird:

Code: Select all

public partial class Login : ComponentBase
{
[Inject]
public HttpClient HttpClient { get; set; } = default!;

async Task LogInAsync()
{
//...some code omitted for brevity
var response = await HttpClient.PostAsync("api/users/signin", content);
}
}
Das Problem ist, dass HttpClient.BaseAddress manchmal null ist, manchmal ist es gefüllt. Wenn ich die App neu starte und ausführe, wird manchmal ein Fehler mit null BaseAddress ausgegeben, manchmal funktioniert es, wenn BaseAddress einen Wert hat.
Falls Ihnen das aufgefallen ist client Program.cs, ich habe ein Protokoll hinzugefügt, um die BaseAddress zu überprüfen. Wenn kein Fehler auftritt, wird das Protokoll in der Browserkonsole angezeigt. Wenn jedoch ein Fehler auftritt, ist BaseAddress nicht nur null, sondern das Protokoll wird auch nicht angezeigt. Es ist, als ob es diese Codezeile nicht durchlaufen hätte. Selbst wenn BaseAddress null ist, hätte meiner Meinung nach mindestens die Zeichenfolge „The BaseAddress is:“ protokolliert werden sollen.
Was mache ich falsch?
BEARBEITEN:
Okay, nach weiteren Tests scheint es ein Timing-Problem zu sein. Wenn ich auf die Anmeldeschaltfläche klicke, sobald sie angezeigt wird, scheint der Clientcode noch nicht ausgeführt worden zu sein (?). Aus diesem Grund wird kein Protokoll angezeigt und BaseAddress ist null. Ich vermute, das ist die vorgerenderte Serverseite (falls falsch, ich habe gerade erst mit dem Lesen begonnen)? Aber wenn ich ein paar Sekunden warte, wird das Protokoll angezeigt und BaseAddress erhält einen Wert.
Wenn dies tatsächlich der Fall ist, wie gehen wir normalerweise damit um?
EDIT 2:
Ich bin mir nicht sicher, ob es sich um ein Zeitproblem handelt, da ich auf einen Fall gestoßen bin, bei dem das Protokoll auch nach dem Warten nicht vollständig angezeigt wurde für ein paar Minuten. Aber nach dem Aktualisieren wird das Protokoll angezeigt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post