You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Core Web Api方法返回元组失效,客户端获空值如何解决?

问题解决步骤

1. 修复客户端请求URL的占位符替换问题

你当前客户端代码里的URL是硬编码的"api/account/GetPerson/{id}",这里的{id}并没有被替换成实际传入的参数值,导致服务端收到的id是默认值0,自然查询不到对应数据返回空元组。

修改客户端代码,使用字符串插值替换占位符:

public async Task<(Person, List<ContactData>)> GetPerson(int id)
{
    // 使用$符号进行字符串插值,将实际id值传入URL
    var tuple = await Http.GetFromJsonAsync<(Person, List<ContactData>)>($"api/account/GetPerson/{id}");
    return tuple;
}

2. 优化元组的序列化/反序列化兼容性

无命名值元组在序列化时会被序列化为带有Item1、Item2属性的JSON对象,虽然客户端用相同的无命名元组理论上可以反序列化,但使用命名元组能避免潜在的匹配问题,让序列化逻辑更清晰:

服务端修改:

[HttpGet("GetPerson/{id}")]
[Authorize(Roles = "Administrators")]
// 给元组的两个元素命名
public async Task<(Person Person, List<ContactData> ContactDatas)> GetPerson(int id = 0)
{                
    Data.ThePerson person = new Data.ThePerson();
    List<ContactData> cDatas = person.contactDatas.Where(it => it.ContactId == id).ToList();
    var p = person.persons.FirstOrDefault(p => p.Id == id);
    return (Person: p, ContactDatas: cDatas);        
}

客户端对应修改:

// 使用和服务端一致的命名元组类型
public async Task<(Person Person, List<ContactData> ContactDatas)> GetPerson(int id)
{
    var tuple = await Http.GetFromJsonAsync<(Person Person, List<ContactData> ContactDatas)>($"api/account/GetPerson/{id}");
    return tuple;
}

3. 验证服务端数据查询逻辑(可选)

虽然你提到服务端能正确构建元组,但可以在服务端添加日志或断点,确认传入的id参数是否正确,以及person.persons和person.contactDatas中是否存在对应id的数据,排除数据源本身的问题。


内容的提问来源于stack exchange,提问作者mz1378

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:32:19