Http GetJsonAsync 从服务器 API 返回 null
Posted
技术标签:
【中文标题】Http GetJsonAsync 从服务器 API 返回 null【英文标题】:Http GetJsonAsync returns null from server API 【发布时间】:2019-05-30 14:16:02 【问题描述】:我正在尝试使用 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);
【问题讨论】:
控制台有错误吗?也请使用服务器端代码编辑问题 @GerritBergen 已编辑帖子。控制台没有错误。请求以成功的 HTTP 200 代码完成。 好的,只是为了排除一些问题。在您的客户端中使用网址“api/Users/GetUsers”。还将 API 上的返回类型设置为“Task>>”。请将接收类型更改为 List在 url 前面有一个正斜杠现在是错误的,所以不会通过任何请求。
请在您的客户端中使用 api/Users/GetUsers
。
将 API 上的返回类型设置为Task<ActionResult<List<User>>>
,并将接收类型更改为List<User>
,而不是User[]
。
这样做可以确保发送和接收类型不会不匹配。
【讨论】:
【参考方案2】:我有同样的问题。确保您尝试发送的类是具有 getter 和 setter 的属性:
public string Name get; set;
【讨论】:
【参考方案3】:我在以后的版本中也遇到了这个问题。然而,在我的实例中,它似乎反对使用构造函数创建的对象。删除构造函数并创建对象,如下所示。
var personal = new Personal() YearofBirth = 1966, Gender="M", Email="alex@test.com";
【讨论】:
以上是关于Http GetJsonAsync 从服务器 API 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
使用 httpClient.GetJsonAsync 错误的 Blazor Rest Api 调用