【问题标题】:Error CS0029 Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.ActionResult' to 'System.Collections.Generic.List<>'错误 CS0029 无法将类型“Microsoft.AspNetCore.Mvc.ActionResult”隐式转换为“System.Collections.Generic.List<>”
【发布时间】:2019-03-10 00:07:33
【问题描述】:

我尝试了 StackOverflow 上发布的解决方案,但都没有奏效。 我有一个调用 Web 服务的方法。代码如下,我不断收到编译器错误:

    public async Task<ActionResult <List<items>>>getitems()
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("https://localhost:5001/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
        var Res = await client.PostAsJsonAsync("api/sub", ids);
        Res.EnsureSuccessStatusCode();
        if (Res.IsSuccessStatusCode)
        {
            var Response = Res.Content.ReadAsStringAsync().Result;   
            var sub = JsonConvert.DeserializeObject<JArray>(Response);
            List<items> item = sub.ToObject<List<items>>();
            return Ok(item);
        }
    }

然后我从不同的类调用方法如下:

    public async Task<List<items>> getService(List<string> ids)
    {
        var IdentificationIdsToOrder = new JObject();
        foreach (var id in ids)
        {
            var newId = new JProperty("ids", id);
            IdentificationIdsToOrder.Add(newId);
        }
        _controller = new getitems();
        var Res = await _controller.getitems();         
        var ItemList = Res.Result;
        return ItemList;
    }
}

这里返回值出错,无法编译。

我错过了什么?

【问题讨论】:

  • 显示的代码有不一致的地方。提供minimal reproducible example 以澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • @Nkosi 抱歉,我正在尝试不同的方法并将一些代码混合在一起,遵循堆栈溢出的不同示例
  • 这个可以理解。但是为了获得帮助,您至少需要有一组基本代码,我们可以使用这些代码来重现您的问题并找到解决方案。
  • 是的,我编辑了 post 方法。当我用邮递员测试时,这实际上是有效的。但问题是当我从不同的班级调用它时我无法开始工作
  • ActionResult 与 Mvc 一起使用,以在调用 action 方法时返回响应。我会将您的 api 调用代码提取到另一个仅返回 List 的类中,然后在 getitems 操作和您的 getService 方法中使用它。

标签: c# .net asynchronous asp.net-web-api actionresult


【解决方案1】:

getService 方法中,您应该使用var ItemList = Res.Value; 代替var ItemList = Res.Result;

public async Task<List<items>> getService(List<string> ids)
{
    var IdentificationIdsToOrder = new JObject();
    foreach (var id in ids)
    {
        var newId = new JProperty("ids", id);
        IdentificationIdsToOrder.Add(newId);
    }

    _controller = new getitems();
    var Res = await _controller.getitems();         
    var ItemList = Res.Value;
    return ItemList;

}

【讨论】:

  • 这仅在我从我正在调用的方法中删除操作结果后才有效。这就是为什么我投票赞成 Eugene S. 评论
猜你喜欢
  • 2020-10-04
  • 2017-10-06
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2020-11-24
相关资源
最近更新 更多