如何在Blazor CRUD中列出所有用户并解决ApplicationUser识别问题
问题解决步骤
1. 解决ApplicationUser无法识别的问题
ApplicationUser是项目自定义的Identity扩展类,不属于Microsoft.AspNetCore.Identity原生命名空间,按你的项目类型对应处理:
- 纯Blazor Server项目:只需引入对应命名空间即可。单页引用可以在Razor页顶部添加
@using 你的项目名.对应存放路径,例如ApplicationUser放在Areas/Identity/Data目录下,项目名为BlazorServerDemo,就写@using BlazorServerDemo.Areas.Identity.Data;也可以直接在项目根目录的_Imports.razor文件里添加上述using语句,全局生效所有Razor页面都可以直接识别。 - 混用Blazor WASM的项目:需要将ApplicationUser定义放到前后端共用的共享类库中,否则客户端项目无法访问服务端单独定义的类型。
2. 修复接口调用错误
你当前的接口请求地址不符合ASP.NET Core默认路由规则:
控制器的默认路由规则为api/[控制器类名去掉Controller后缀],如果你的控制器类名为AdministrationController,基础路由是api/Administration,不是api/AdministrationController。
建议显式配置路由避免出错:
给控制器类添加路由特性:
[ApiController] [Route("api/[controller]")] public class AdministrationController : ControllerBase { // 你的其他代码 }
给查询用户的Action显式配置路由,同时修复异步查询写法:
[HttpGet("getUsers")] public async Task<ActionResult<IEnumerable<ApplicationUser>>> getUsers() { // 注意要调用异步方法ToListAsync搭配await,避免同步阻塞 return await _context.Users.ToListAsync(); }
此时Razor页的请求地址改为对应路径即可:
var users = await httpClient.GetFromJsonAsync<List<ApplicationUser>>("api/Administration/getUsers");
3. Blazor Server更优方案(无需走控制器接口)
Blazor Server的代码运行在服务端,完全不需要通过HttpClient调用本地控制器,直接注入相关服务读数据性能更高、代码更简单:
- Identity脚手架默认已经注册
UserManager<ApplicationUser>服务,无需额外配置 - Razor页直接注入服务读取用户列表:
@page "/administration/" @inject UserManager<ApplicationUser> UserManager @code { private List<ApplicationUser> Users { get; set; } protected override async Task OnInitializedAsync() { Users = await UserManager.Users.ToListAsync(); } }
其他注意事项
- Blazor Server如果要使用HttpClient,需要提前在Program.cs里注册服务:
builder.Services.AddHttpClient(); - 读取用户列表建议加权限校验,避免未授权用户访问敏感数据
内容的提问来源于stack exchange,提问作者kouwschottel
相关产品推荐
相关产品推荐

