如何从Windows服务调用Web API

时间:2012-10-17 20:16:07

标签: c# .net asp.net-mvc windows-services asp.net-web-api

我有一个用Windows Service编写的应用程序,这个应用程序需要调用用Asp.Net MVC 4 WebAPi编写的WebAPI。 WebAPI中的此方法返回具有基本类型的DTO,如:

class ImportResultDTO {
   public bool Success { get; set; }
   public string[] Messages { get; set; }
}

和我的webapi

public ImportResultDTO Get(int clientId) {
   // process.. and create the dto result.
   return dto;
}

我的问题是,如何从Windows服务中调用webApi?我有我的URL和参数值,但我不知道如何调用以及如何将xml结果反序列化到DTO。

谢谢

2 个答案:

答案 0 :(得分:15)

您可以使用System.Net.Http.HttpClient。您显然需要在下面的示例中编辑伪基址和请求URI,但这也显示了检查响应状态的基本方法。

// Create an HttpClient instance
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:8888/");

// Usage
HttpResponseMessage response = client.GetAsync("api/importresults/1").Result;
if (response.IsSuccessStatusCode)
{
    var dto = response.Content.ReadAsAsync<ImportResultDTO>().Result;
}
else
{
    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}

答案 1 :(得分:4)

您可以将此NuGet包Microsoft ASP.NET Web API Client Libraries安装到Windows服务项目中。

这是一个简单的代码片段,演示了如何使用HttpClient:

        var client = new HttpClient();
        var response = client.GetAsync(uriOfYourService).Result;
        var content = response.Content.ReadAsAsync<ImportResultDTO>().Result;

(为了简单起见,我在这里调用.Result())。

有关HttpClient的更多示例,请查看以下内容:List of ASP.NET Web API and HttpClient Samples.