您可以看一下以下文档教程:
- 在ASP.NET Web API 2中从.NET客户端调用Web API
但是,作为答案,我将在此处分享一个简短的分步指南,介绍如何以Windows形式调用和使用Web API:
- 安装软件包 -安装
Microsoft.AspNet.WebApi.Client
NuGet软件包(Web API客户端库)。
打开工具菜单→NuGet程序包管理器→程序包管理器控制台→在程序包管理器控制台窗口中,键入以下命令:
Install-Package Microsoft.AspNet.WebApi.Client
您可以通过右键单击项目并选择“管理NuGet软件包”来安装软件包。
设置HttpClient- 创建的实例
HttpClient
并设置其baseAddress
和DefaultRequestHeaders
。例如:// In the class
static HttpClient client = new HttpClient();
// Put the following pre where you want to initialize the class
// It can be the static constructor or a one-time initializer
client.baseAddress = new Uri(“http://localhost:4354/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(“application/json”));发送请求 -要发送请求,可以使用以下方法
HttpClient
:- GET: ,
GetAsync
,,GetStringAsync``GetByteArrayAsync``GetStreamAsync
- POST: ,,
PostAsync``PostAsJsonAsync``PostAsXmlAsync
- PUT: ,,
PutAsync``PutAsJsonAsync``PutAsXmlAsync
- Delete:
DeleteAsync
- 另一个HTTP方法:
Send
- GET: ,
注意: 请记住,要为这些方法设置请求的URL,因为在定义时已指定了基本URL
client,则此处为这些方法设置了路径,路由值和查询字符串,例如:
// Assuming http://localhost:4354/api/ as baseAddress var response = await client.GetAsync("products");要么
// Assuming http://localhost:4354/api/ as baseAddress var product = new Product() { Name = "P1", Price = 100, Category = "C1" };var response = await client.PostAsJsonAsync("products", product);- 得到回应
要获得响应,如果您使用了类似的方法
GetStringAsync,那么您会将响应作为字符串使用,并且足以解析该响应。如果响应是您知道的Json内容,则可以轻松地使用package
JsonConvert类对其
Newtonsoft.Json进行解析。例如:
// Assuming http://localhost:4354/api/ as baseAddress var response = await client.GetStringAsync("product");var data = JsonConvert.DeserializeObject<List<Product>>(response);this.productBindingSource.DataSource = data;如果你已经使用的方法,如
GetAsync或
PostAsJsonAsync与你有
HttpResponseMessage那么你可以使用
ReadAsAsync,
ReadAsByteArrayAsync,
ReadAsStreamAsync,`ReadAsStringAsync,例如:
// Assuming http://localhost:4354/api/ as baseAddress var response = await client.GetAsync("products");var data = await response.Content.ReadAsAsync<IEnumerable<Product>>();this.productBindingSource.DataSource = data;性能提示
HttpClient
是一种类型,只能创建一次然后共享。因此,不要在每次要使用它时都将其放在using块中。而是,创建类的实例并通过静态成员共享它。要了解有关此内容的更多信息,请查看不正确的实例化反模式
设计技巧
- 尽量避免将与Web API相关的代码与您的应用程序逻辑混合在一起。例如,假设您有一个产品Web API服务。然后要使用它,首先定义一个
IProductServieClient
接口,然后在实现中将所有WEB API逻辑放入ProductWebAPIClientService
要实现的内部,以包含与WEB API交互的代码。您的应用程序应依赖IProductServieClient
。(SOLID原则,依赖倒置)。



