我是Web API和Windows Store App 8.1的新手。我正在开发一个与Web API通信的Windows应用商店应用。当我尝试编写以下代码时:
// server:53452/api/demo?ReportingMonth=10&ReportingYear=2013"
using (HttpClient httpClient = new HttpClient())
{
using (HttpResponseMessage response = await httpClient.GetAsync(new Uri("address")))
{
string result = await response.Content.ReadAsStringAsync();
var prodt = JsonConvert.DeserializeObject<ObservableCollection<Statuses>>(result);
return prodt;
}
}
我看到HttpClient同时位于Windows.Web.Http和System.Net.Http中。我应该使用哪个命名空间?
如果我选择System.Net.Http
命名空间,当我尝试调用启用了Windows身份验证的Web API时,游标将不会返回到客户端,保持未知状态。不知道为什么我没有收到回复。
address = "abc.com:53452/api/demo?ReportingMonth=10&ReportingYear=2013"
using (HttpResponseMessage response = await httpClient.GetAsync(new Uri(address)))
如果我使用HttpClient
中的Windows.Web.Http
,则Windows商店应用会要求我输入凭据,即使我正确输入了凭据,系统仍会提示输入凭据。谁能解释为什么会这样?
答案 0 :(得分:2)
Demystifying HttpClient APIs in the Universal Windows Platform
我应该使用哪一个?
由于这两个API都可以在UWP中使用,这是最大的问题 对于HTTP开发人员,在他们的应用程序中使用哪一个。答案是 这取决于几个因素:
- 您是否需要与本机UI集成以收集用户凭据,控制HTTP缓存读写行为;或通过 用于身份验证的特定SSL客户端证书?
醇>如果是 - 则使用Windows.Web.Http.HttpClient。在此时 通过编写,Windows.Web.Http API可以更好地控制HTTP UWP中的设置比System.Net.Http API。在未来的版本中, 还可以增强System.Net.Http API以支持这些功能 UWP。
- 您是否打算编写跨平台的.NET代码(跨UWP / ASP.NET 5 / iOS和Android)?
醇>如果是 - 那么使用System.Net.Http API。这允许您编写代码 您可以在其他.NET平台(如ASP.NET 5和.NET)上重复使用 框架桌面应用程序感谢Xamarin,这个API也是 在iOS和Android上受支持,因此您可以在这些上重复使用代码 平台也是如此。
答案 1 :(得分:1)
要执行HTTP身份验证,而不是HttpClientHandler
使用HttpBaseProtocolFilter
:
var filter = new HttpBaseProtocolFilter();
filter.ServerCredential = new
Windows.Security.Credentials.PasswordCredential(uri.ToString(), "foo", "bar");
var client = new HttpClient(filter);