Web API: Client: Call a Web API from a .net client

原文地址: http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

翻译地址:http://www.cnblogs.com/r01cn/archive/2012/11/20/2779011.html

Server Code:

1. 用EF创建Code First的Project;

2. 用VS创建Web API code;

Client Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Test.EntityFramework.Models;

namespace Test.WebAPI.Client
{
    class Program
    {
        static void Main(string[] args)
        {
            // Unblock;
            TestUnblock();
            Console.WriteLine("Unblock...");

            // Unblock

            Test();

           // Block
            Test().Wait();

            Console.WriteLine("Exist...");

            Console.ReadLine();
        }

        public static async Task Test()
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:55165/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


                HttpResponseMessage response = await client.GetAsync("api/test");  // Blocking call

                // Get
                if (response.IsSuccessStatusCode)
                {
                    // Parse the response body. Blocking!
                    var products = await response.Content.ReadAsAsync<IEnumerable<Test.EntityFramework.Models.Test>>();
                    foreach (var p in products)
                    {
                        Console.WriteLine("{0}	{1};", p.ID, p.Title);
                    }
                }
                else
                {
                    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                }

                // Post
                var testEntity = new Test.EntityFramework.Models.Test() { Number = 3, Title = "title3" };
                response = await client.PostAsJsonAsync("api/test", testEntity);
                if (response.IsSuccessStatusCode)
                {
                    Uri testEntityUrl = response.Headers.Location;

                    // Put
                    response = await client.GetAsync(testEntityUrl);
                    testEntity = await response.Content.ReadAsAsync<Test.EntityFramework.Models.Test>();
                    testEntity.Title = "title3...";
                    response = await client.PutAsJsonAsync(testEntityUrl, testEntity);

                    // Delete
                    response = await client.DeleteAsync(testEntityUrl);
                }
            }
        }
        public static async void TestUnblock()
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:55165/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


                HttpResponseMessage response = await client.GetAsync("api/test");  // Blocking call

                // Get
                if (response.IsSuccessStatusCode)
                {
                    // Parse the response body. Blocking!
                    var products = await response.Content.ReadAsAsync<IEnumerable<Test.EntityFramework.Models.Test>>();
                    foreach (var p in products)
                    {
                        Console.WriteLine("{0}	{1};", p.ID, p.Title);
                    }
                }
                else
                {
                    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                }

            }
        }
    }
}
原文地址:https://www.cnblogs.com/LeimOO/p/3627433.html