移动应用程序如何调用Web API?

时间:2013-11-07 07:45:26

标签: asp.net-mvc-4 asp.net-web-api

我正在创建一个与Web API一起使用的演示移动应用程序。我关注这个网站:

这就是我调用Web API的方式:

class Program
    {
        static void Main(string[] args)
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://localhost:9000/");

            // Add an Accept header for JSON format.
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
        }
    }

这就是API函数的调用方式:

HttpResponseMessage response = client.GetAsync("api/products").Result;  // Blocking call!
if (response.IsSuccessStatusCode)
{
    // Parse the response body. Blocking!
    var products = response.Content.ReadAsAsync<IEnumerable<Product>>().Result;
    foreach (var p in products)
    {
        Console.WriteLine("{0}\t{1};\t{2}", p.Name, p.Price, p.Category);
    }
}
else
{
    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}

我不明白这一行:

HttpResponseMessage response = client.GetAsync("api/products").Result;    

使用api/products地址时的注意事项是什么? API的模型,控制器类还是其他任何东西?

2 个答案:

答案 0 :(得分:0)

您的问题的答案位于您引用的第一页:

  

要获取所有产品的列表,请将此方法添加到ProductsController类:

public class ProductsController : ApiController
{
    public IEnumerable<Product> GetAllProducts()
    {
        return repository.GetAll();
    }
    // ....
}
     

方法名称以“Get”开头,因此按照惯例,它映射到GET请求。此外,因为该方法没有参数,所以它映射到路径中不包含“id”段的URI。

所以,致电

HttpResponseMessage response = client.GetAsync("api/products").Result;

将调用products控制器的以Get开头并且没有参数的函数。

如果您不熟悉控制器,可以在ASP.NET MVC Overview上了解有关MVC模式的更多信息。

答案 1 :(得分:0)

HttpResponseMessage response = client.GetAsync("api/products").Result表示向作为API控制器的Product控制器发送请求。产品控制器处理您的请求后,将其结果存储在HttpResponseMessage的实例中。

如果你设置一个断点,你会看到该响应包含一个产品列表(我假设这是产品控制器所做的)。