我有一个用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。
谢谢
答案 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.