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

如何从ReadAsStringAsync响应中正确获取Blazor WASM的API返回数据?

问题:Blazor WASM中无法正确反序列化API响应数据

现有实现

NET8 Blazor WASM客户端在OnInitializedAsync方法中调用API的代码如下:

HttpResponseMessage response = await Http.GetAsync("https://localhost:7094/api/MyResource/94d0e5ca-2be7-42f7-94dc-13955c11595c");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Console.WriteLine($"RESPONSE: {responseBody}");

var payload = JsonSerializer.Deserialize<MyClass>(responseBody);
var json = JsonSerializer.Serialize(payload);

Console.WriteLine($"PAYLOAD: {json}");

API响应结构

responseBody返回的JSON包含额外的包装层,实际业务数据位于result.content节点内:

{
    "creationOptions": 0,
    "id": 226,
    "isCanceled": false,
    "isCompleted": true,
    "isCompletedSuccessfully": true,
    "isFaulted": false,
    "result": {
        "content": {
            <实际业务数据>
        },
        "links": {
            <HATEOAS链接>
        }
    },
    "status": 5
}

问题现象

直接将responseBody反序列化为MyClass时得到null,原因是JSON结构包含额外的HTTP请求结果包装层,与MyClass的字段不匹配。尝试使用Http.GetFromJsonAsync<Payload<MyClass>>调用,返回结果为{"content": null, "links": null},怀疑存在时序问题。

需求

寻求从该JSON响应中提取实际有效业务数据的最优方案。

最终修复方案

通过修改API端的响应输出逻辑,彻底解决客户端反序列化问题:

  • 将API的返回类型从Task改为IActionResult
  • 移除不必要的响应包装层

修改完成后,客户端可直接通过以下代码获取并反序列化数据:

var myEntities = await Http.GetFromJsonAsync<IEnumerable<FabricageSoort>>("https://localhost:7094/api/FabricageSoort/");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:42:37