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

使用RestSharp将API数据返回至View时遇类型不匹配异常求助

解决ASP.NET MVC中RestSharp调用API的模型类型不匹配异常

错误核心原因

当前存在三个关键问题导致类型不匹配异常:

  • 异步方法未正确等待:控制器调用异步方法时未用await,传递给视图的是Task<ProductViewModel>对象,而非实际产品数据
  • API响应反序列化错误:API返回包含产品数组的RootViewModel结构,但代码错误地反序列化为单个ProductViewModel
  • 返回类型与视图期望不匹配:视图需要IEnumerable<ProductViewModel>类型模型,但客户端方法返回单个对象,控制器也未正确传递产品集合

分步修复代码

1. 修正WebProductClient的GetAllProduct方法

调整返回类型并正确反序列化API响应:

public class WebProductClient : IWebProductClient
{
    private readonly RestClient _client;
    private readonly string _url;

    public WebProductClient()
    {
        // 修正URL格式错误
        _url = "https://localhost:7123/";
        var options = new RestClientOptions(_url);
        _client = new RestClient(options);
    }

    public async Task<RootViewModel> GetAllProduct()
    {
        var request = new RestRequest("Api/Products");
        var response = await _client.ExecuteGetAsync(request);
        // 反序列化为正确的RootViewModel类型
        var r = JsonConvert.DeserializeObject<RootViewModel>(response.Content);
        return r;
    }
}

2. 修正ProductsController的Index方法

改为异步方法,正确获取并传递产品集合:

public async Task<IActionResult> Index()
{
    var rootModel = await _client.GetAllProduct();
    // 传递Products数组给视图,匹配IEnumerable<ProductViewModel>类型
    return View(rootModel.Products);
}

3. 视图验证

视图已声明正确的模型类型@model IEnumerable<DummyShop.Service.ViewModel.ProductViewModel>,无需修改。rootModel.Products是ProductViewModel[]类型,天然实现IEnumerable接口,可直接用于视图遍历。


额外优化建议

  • 添加异常处理逻辑,捕获API调用或序列化过程中的错误:
public async Task<RootViewModel> GetAllProduct()
{
    try
    {
        var request = new RestRequest("Api/Products");
        var response = await _client.ExecuteGetAsync(request);
        response.EnsureSuccessStatusCode(); // 校验HTTP响应状态
        var r = JsonConvert.DeserializeObject<RootViewModel>(response.Content);
        return r;
    }
    catch (Exception ex)
    {
        // 记录日志或自定义异常处理
        throw;
    }
}
  • 确认RestSharp与Newtonsoft.Json包版本兼容,避免序列化兼容性问题

内容的提问来源于stack exchange,提问作者Kaan Yılmazer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:55:14