You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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调用本地控制器,直接注入相关服务读数据性能更高、代码更简单:

  1. Identity脚手架默认已经注册UserManager<ApplicationUser>服务,无需额外配置
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:24:03