blazor web assembly 服务对象引用未设置为对象的实例
blazor web assembly service object reference not set to an instance of an object
我正在 blazor wasm 中构建一些解决方案,我需要在初始加载任何页面之前从我的 api 获取一些用户信息。
所以我有这样的服务
public class UserService
{
private readonly HttpClient http;
private User u;
public User User
{
get { return u; }
set { u = value; }
}
public UserService(HttpClient http)
{
this.http = http;
try
{
GetUser();
}
catch (Exception ex)
{
this.u = null;
Console.WriteLine("UserService Ctor failed to get user from api except:" + ex.Message);
}
}
private async void GetUser()
{
string endpoint = "user/getuser";
this.u = await this.http.GetFromJsonAsync<User>(endpoint);
}
}
}
在startup.cs
builder.Services.AddSingleton<UserService>(new UserService(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }) );
在索引中
@if (this.u != null && u.User.Login != null ){ @U.User.Login}
[Inject]
private UserService u { get; set; }
当我 运行 我得到
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
..... line 9 so this with null username
所以我假设这个渲染是在这个 userService 被实例化之前......我应该如何处理这个以等待任何渲染,直到 UserService ctor 中的这个初始加载完成?
好的谢谢大家
我喜欢
UserService u = new UserService(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await u.GetUser();
builder.Services.AddSingleton<UserService>(u);
这种方式很好,ctor也很简单
public UserService(HttpClient http)
{
this.http = http;
}
public async Task GetUser()
{
string endpoint = "user/getuser";
this.u = await this.http.GetFromJsonAsync<User>(endpoint);
}
有没有更好的方法?
我知道我可以使用 AuthenticationStateProvider
但我不想走这条路
我正在 blazor wasm 中构建一些解决方案,我需要在初始加载任何页面之前从我的 api 获取一些用户信息。
所以我有这样的服务
public class UserService
{
private readonly HttpClient http;
private User u;
public User User
{
get { return u; }
set { u = value; }
}
public UserService(HttpClient http)
{
this.http = http;
try
{
GetUser();
}
catch (Exception ex)
{
this.u = null;
Console.WriteLine("UserService Ctor failed to get user from api except:" + ex.Message);
}
}
private async void GetUser()
{
string endpoint = "user/getuser";
this.u = await this.http.GetFromJsonAsync<User>(endpoint);
}
}
}
在startup.cs
builder.Services.AddSingleton<UserService>(new UserService(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }) );
在索引中
@if (this.u != null && u.User.Login != null ){ @U.User.Login}
[Inject]
private UserService u { get; set; }
当我 运行 我得到
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
..... line 9 so this with null username
所以我假设这个渲染是在这个 userService 被实例化之前......我应该如何处理这个以等待任何渲染,直到 UserService ctor 中的这个初始加载完成?
好的谢谢大家 我喜欢
UserService u = new UserService(new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await u.GetUser();
builder.Services.AddSingleton<UserService>(u);
这种方式很好,ctor也很简单
public UserService(HttpClient http)
{
this.http = http;
}
public async Task GetUser()
{
string endpoint = "user/getuser";
this.u = await this.http.GetFromJsonAsync<User>(endpoint);
}
有没有更好的方法?
我知道我可以使用 AuthenticationStateProvider
但我不想走这条路