gpt4 book ai didi

c# - Http GetJsonAsync 从服务器 API 返回 null

转载 作者:行者123 更新时间:2023-11-30 21:28:34 25 4
gpt4 key购买 nike

我正在尝试使用 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>
}

GetJsonAsync 方法似乎返回 null,尽管记录在数据库中,尽管事实上我能够通过浏览至/api/users 查看 Json 格式的实体。我对此的实现是否正确,有人知道如何解决这个问题吗?

编辑:服务器端代码:

[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);
}
}

最佳答案

在 url 前面有一个正斜杠现在是错误的,所以没有请求会通过。使用 api/Users/GetUsers而是在您的客户端中。

将 API 上的返回类型设置为 Task<ActionResult<List<User>>>并将接收类型更改为List<User>而不是 User[] .

这样做将确保发送和接收类型不匹配。

关于c# - Http GetJsonAsync 从服务器 API 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56380009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com