我正在尝试使用Blazor和.NET Core 3和EF Core 3创建一个应用程序。我已经设置了一个数据库模型和一个用于用户(/ api / users)的API,并在chrome中浏览到此数据库会返回数据库中的所有实体。但是,Razor文件中的GetJson方法返回null。
这是我的Razor代码文件:
@page "/"
@using LogicX.Shared
@inject HttpClient Http
<h1>Users</h1>
@functions{
User[] _users;
protected override async Task OnInitAsync()
{
var users = await Http.GetJsonAsync<User[]>("/api/users");
_users = users;
}
}
@foreach (var usr in _users)
{
<td>@usr.Username</td>
}
尽管数据库中有记录,并且尽管我能够通过浏览/ api / users以Json格式查看实体,但GetJsonAsync方法似乎返回null。我对此的实施是否正确,是否有人知道如何解决此问题?
编辑:服务器端代码:
[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class UsersController : Controller
{
private readonly LogicXDbContext _context;
public UsersController(LogicXDbContext context)
{
_context = context;
}
// GET: api/Users
[HttpGet]
public async Task<ActionResult<IEnumerable<User>>> GetUsers()
{
return await _context.Users.ToListAsync();
}
// GET: api/Users/5
[HttpGet("{id}")]
public async Task<ActionResult<User>> GetUser(int id)
{
var user = await _context.Users.FindAsync(id);
if (user == null)
{
return NotFound();
}
return user;
}
// PUT: api/Users/5
[HttpPut("{id}")]
public async Task<IActionResult> PutUser(int id, User user)
{
if (id != user.Id)
{
return BadRequest();
}
_context.Entry(user).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Users
[HttpPost]
public async Task<ActionResult<User>> PostUser(User user)
{
_context.Users.Add(user);
await _context.SaveChangesAsync();
return CreatedAtAction("GetUser", new { id = user.Id }, user);
}
// DELETE: api/Users/5
[HttpDelete("{id}")]
public async Task<ActionResult<User>> DeleteUser(int id)
{
var user = await _context.Users.FindAsync(id);
if (user == null)
{
return NotFound();
}
_context.Users.Remove(user);
await _context.SaveChangesAsync();
return user;
}
private bool UserExists(int id)
{
return _context.Users.Any(e => e.Id == id);
}
}
}