我正试图在Blazor Server环境中获得一个用于用户管理的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");
}
}
问题是在Razor视图中无法识别ApplicationUser。我尝试注入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 ...
}