The ASP.Net Web API has replaced the WCF Web API previously mentioned.
(ASP.Net Web API取代了前面提到的WCF Web API。)
I thought I'd post an updated answer since most of these responses are from early 2012, and this thread is one of the top results when doing a Google search for "call restful service c#".
(我想我应该发布更新的答案,因为这些回复大多数都来自2012年初,而该线程是在Google搜索“呼叫宁静的服务c#”时的最佳结果之一。)
Current guidance from Microsoft is to use the Microsoft ASP.NET Web API Client Libraries to consume a RESTful service.
(Microsoft当前的指南是使用Microsoft ASP.NET Web API客户端库来使用RESTful服务。)
This is available as a NuGet package, Microsoft.AspNet.WebApi.Client. (它可以作为NuGet包Microsoft.AspNet.WebApi.Client使用。)
You will need to add this NuGet package to your solution. (您将需要将此NuGet软件包添加到您的解决方案中。)
Here's how your example would look when implemented using the ASP.Net Web API Client Library:
(使用ASP.Net Web API客户端库实现时,示例如下所示:)
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
namespace ConsoleProgram
{
public class DataObject
{
public string Name { get; set; }
}
public class Class1
{
private const string URL = "https://sub.domain.com/objects.json";
private string urlParameters = "?api_key=123";
static void Main(string[] args)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(URL);
// Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
// List data response.
HttpResponseMessage response = client.GetAsync(urlParameters).Result; // Blocking call! Program will wait here until a response is received or a timeout occurs.
if (response.IsSuccessStatusCode)
{
// Parse the response body.
var dataObjects = response.Content.ReadAsAsync<IEnumerable<DataObject>>().Result; //Make sure to add a reference to System.Net.Http.Formatting.dll
foreach (var d in dataObjects)
{
Console.WriteLine("{0}", d.Name);
}
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
//Make any other calls using HttpClient here.
//Dispose once all HttpClient calls are complete. This is not necessary if the containing object will be disposed of; for example in this case the HttpClient instance will be disposed automatically when the application terminates so the following call is superfluous.
client.Dispose();
}
}
}
If you plan on making multiple requests, you should re-use your HttpClient instance.
(如果计划发出多个请求,则应重新使用HttpClient实例。)
See this question and its answers for more details on why a using statement was not used on the HttpClient instance in this case: Do HttpClient and HttpClientHandler have to be disposed? (有关为什么在这种情况下HttpClient实例上不使用using语句的更多详细信息,请参见此问题及其答案: 是否必须处置HttpClient和HttpClientHandler?)
For more details, including other examples, go here: http://www.asp.net/web-api/overview/web-api-clients/calling-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)
This blog post may also be useful: http://johnnycode.com/2012/02/23/consuming-your-own-asp-net-web-api-rest-service/
(该博客文章也可能有用: http : //johnnycode.com/2012/02/23/consumption-your-own-asp-net-web-api-rest-service/)