【问题标题】:Getting null from get request but context returns value从获取请求中获取 null 但上下文返回值
【发布时间】:2019-11-23 00:35:13
【问题描述】:

我从数据库返回项目的后端如下所示

    // GET: api/Members
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Members>>> GetMembers()
    {
        return await _context.Members.ToArrayAsync();
    }

并且可以确认我正在获取数据

我的 get 到达了这个终点

private async Task GetMembers()
{
    _members = await Http.GetJsonAsync<Members[]>("api/Members");
}

但我从“会员”那里得到空值 "members" 是一个数组

private Members[] _members;

这是我的 null

我做错了什么?

编辑:成员和_members在图片和帖子中是相同的参考

【问题讨论】:

  • 你是如何设置你的 HttpClient 来调用你的 API 方法的?你能告诉我们吗?
  • @RahulSharma 因为这是 Blazor,我只是在注入它。 "@inject HttpClient Http"

标签: c# asp.net blazor-server-side


【解决方案1】:

看起来您的 HTTPS 请求不起作用。您应该尝试将 HttpClient 用于 resquest 并执行以下操作:

HttpClient client = new HttpClient();

HttpResponseMessage response = await client.GetAsync("yourtUrl");

Members [] members = await response.Content.ReadAsAsync<Members[]>();

【讨论】:

  • 谢谢!你提出的新 http 方法我仍然为空
  • 如果您收到 NullException 可能您的调用没有重新调整您的成员所期望的,或者您调用的 de api 返回错误,您可以检查 te api return ?
  • 对不起,我没有收到 NullException,因为上下文中没有数据,所以我得到了 null...后端返回数据正常,前端得到 null
【解决方案2】:

所以我在使用 Blazor http 注入时遇到问题,所以我将服务作为范围服务注入

services.AddScoped<MembersService>();

然后改变了后端服务

//GET: api/MembersService
[HttpGet]
public async Task<List<Members>> GetMembersAsync()
{
     return new List<Members>(_context.members);
}

请注意,我需要在那里等待。

然后在客户端,

private async Task GetMembers()
{
    _members = await memberService.GetMembersAsync();
}

_members 是一个列表

private List<Members> _members;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2022-01-05
    • 2020-06-13
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多