如何在 Blazor 的 CRUD 中列出所有用户?

How can I list all users in a CRUD in Blazor?

我正在尝试获取 Blazor 服务器环境中用户管理的 CRUD 页面。我尝试了以下代码:

控制器:

    [HttpGet]
    public async Task<ActionResult<IEnumerable<ApplicationUser>>> getUsers()
    {
        return _context.Users.ToList();
    }

剃刀页面:

@page "/administration/"
@inject HttpClient httpClient

@code {
    protected override async Task OnInitializedAsync()
    {
        var users = await httpClient.GetFromJsonAsync<List<ApplicationUser>> 
        ("api/AdministrationController");
    }
}

问题是 ApplicationUser 在 Razor 视图中无法识别。我尝试注入 Microsoft.AspNetCore.Identity 但这在客户端的 Razor 视图中也不可用。

如何使用控制器让所有用户进入剃刀视图?

您可以为您的 API 引入 DTO 对象并从 Blazor 应用程序中使用它。

 [HttpGet]
    public async Task<ActionResult<IEnumerable<ApplicationUserDto>>> getUsers()
    {
        var users =  _context.Users.ToList();
        // convert ApplicationUser --> ApplicationUserDto here
        // AutoMapper/Mapster are good for this
        
    }

然后,在您的 Razor 页面中,您可以使用 DTO:

@code {
    protected override async Task OnInitializedAsync()
    {
        var userDtos = await httpClient.GetFromJsonAsync<List<ApplicationUserDto>> 
        ("api/AdministrationController");
    }
}

DTO 是一个简单的 POCO,包含您想要的所有 ApplicationUser 字段,即:

public class ApplicationUserDto
{
  public Guid Id { get; init; }
  public string Username { get; init; }
  ... etc ...
}