【问题标题】:Calling a GetAll method from a Web Api from your C# client从 C# 客户端的 Web Api 调用 GetAll 方法
【发布时间】:2016-10-15 11:59:15
【问题描述】:

我在网上查看示例并找到了一个关于检索使用 C# WEB API 服务和 C# 控制台应用程序作为客户端的产品的教程,但是,该教程在服务中定义了一个函数来获取所有产品,但是它没有告诉你如何从客户端调用它:

public IEnumerable<Product> GetAllProducts()
{
    ...
}

其他 CRUD 方法使用 IHttpActionResult 声明,所以我很困惑如何调用它。

所以在我的客户中,我盲目地尝试调用以下操作,这显然是不正确的:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:59888/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    // HTTP GET ALL
    HttpResponseMessage response = await client.GetAsync("api/products");
    if (response.IsSuccessStatusCode)
    {
        List<Model.Product> products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>();
    }
}

这给了我一个语法错误。那么我该如何编码呢?我需要更改服务器或客户端代码还是两者都更改?

对于单个产品,代码是这样的:

// HTTP GET Specific Product
response = await client.GetAsync("api/products/1");
if (response.IsSuccessStatusCode)
{
    Model.Product product = await response.Content.ReadAsAsync<Model.Product>();        
}

而服务器是:

public IHttpActionResult GetProduct(int id)
{
    var product = repository.GetByID(id);
    if (product != null)
        return Ok(product);
    else
        return NotFound();     
}

【问题讨论】:

    标签: c# asp.net-web-api2


    【解决方案1】:
    List<Model.Product> products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>(); 
    

    最后你错过了一个结束&gt;。正确:

    var products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>>(); 
    

    【讨论】:

    • 哎呀谢谢我太笨了,我现在可以删除这篇文章吗,显然不能从 IEnumerable 列表中隐式转换为通用列表,但我会想出一个
    • 但是您可以在IEnumerable 的末尾附加.ToList() 以将其作为列表获取。我什至把它改成了var,所以左边的类型应该是IEnumerable&lt;Model.Product&gt;&gt;,这应该会导致该行出错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2019-09-14
    • 2014-01-11
    • 2014-04-04
    相关资源
    最近更新 更多