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

ASP.NET Core调用API时触发InvalidOperationException错误求助

ASP.NET Core InvalidOperationException 问题修复

错误信息

InvalidOperationException: 传入ViewDataDictionary的模型项类型为System.Threading.Tasks.Task,但该ViewDataDictionary需要的模型项类型为System.Collections.Generic.IEnumerable<WebConsumoApi.Models.Product>。

核心问题分析

  • 控制器未等待异步方法执行完成,直接将Task对象传递给视图
  • API调用方法无返回值,且反序列化逻辑错误(将列表数据反序列化为单个Product对象)
  • GET请求错误设置请求体,不符合HTTP规范
  • 接口方法签名与实际需求不匹配,无法提供视图所需的列表数据

代码修复步骤

1. 修复API调用代码

调整方法返回类型,移除无效请求体,修正反序列化逻辑:

public async Task<IEnumerable<Product>> ListAsync()
{
    using var client = new HttpClient
    {
        BaseAddress = new Uri("https://teste.teste1.com.br")
    };

    client.DefaultRequestHeaders.Add("x-user-email", "victor@teste.com.br");
    client.DefaultRequestHeaders.Add("x-api-key", "eyJ0eXAiOiJKV1QiLCJhbGcxYg");
    client.DefaultRequestHeaders.Add("x-store-key", "1");
    client.DefaultRequestHeaders.Add("accept", "application/json;charset=UTF-8");

    // GET请求无需设置Content,直接创建请求消息
    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, "/app/Api/V1/Products/list");
    
    using var res = await client.SendAsync(req);
    res.EnsureSuccessStatusCode();
    var responseBody = await res.Content.ReadAsStringAsync();
    
    // 反序列化为产品列表(若API返回包裹类,需对应调整模型)
    return JsonSerializer.Deserialize<IEnumerable<Product>>(responseBody);
}

2. 修复接口IProduto方法签名

using WebConsumoApi.Models;

namespace WebConsumoApi.Interfaces
{
    public interface IProduto
    {
        // 修改为返回产品列表的异步方法
        Task<IEnumerable<Product>> ListAsync();
        Product Create(Product produto);
        Product Update(Product produto);
        Product GetOne(string Codigo);
        Product Delete(string Codigo);
    }
}

3. 修复控制器Index方法

添加await获取异步执行结果,再传递给视图:

// GET: ProdutosController
public async Task<ActionResult> Index()
{
    var products = await _IProduto.ListAsync();
    return View(products);
}

4. 视图代码修正

修复视图中一处变量引用错误:

<td>
    @Html.DisplayFor(modelItem => item.list_price)
</td>

额外优化建议

  • 使用IHttpClientFactory替代直接实例化HttpClient,避免套接字耗尽问题
  • 添加异常捕获逻辑,处理API调用失败场景
  • 确认API返回JSON结构与Product类字段匹配,必要时添加JsonPropertyName特性映射字段

内容的提问来源于stack exchange,提问作者VICTOR MARCONI SANTOS DE OLIVE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:45:47