混淆在Windows.Web.Http和System.Net.Http中使用哪个版本的HttpClient;

时间:2014-01-11 21:29:38

标签: asp.net-web-api windows-store-apps httpclient windows-8.1

我是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商店应用会要求我输入凭据,即使我正确输入了凭据,系统仍会提示输入凭据。谁能解释为什么会这样?

2 个答案:

答案 0 :(得分:2)

Demystifying HttpClient APIs in the Universal Windows Platform

  

我应该使用哪一个?

     

由于这两个API都可以在UWP中使用,这是最大的问题   对于HTTP开发人员,在他们的应用程序中使用哪一个。答案是   这取决于几个因素:

     
      
  1. 您是否需要与本机UI集成以收集用户凭据,控制HTTP缓存读写行为;或通过   用于身份验证的特定SSL客户端证书?
  2.         

    如果是 - 则使用Windows.Web.Http.HttpClient。在此时   通过编写,Windows.Web.Http API可以更好地控制HTTP   UWP中的设置比System.Net.Http API。在未来的版本中,   还可以增强System.Net.Http API以支持这些功能   UWP。

         
        
    1. 您是否打算编写跨平台的.NET代码(跨UWP / ASP.NET 5 / iOS和Android)?
    2.         

      如果是 - 那么使用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);