2013-10-25 67 views
1

我目前正在尝试使用来自Wunderlist的API在Windows Phone 8上创建待办事项列表。但是,我无法在POST请求中传递我的凭据。这里是我的代码:使用HttpWebRequest发送凭据

public async Task<System.IO.TextReader> DoRequestAsync(WebRequest request) 
    { 
      var task = Task.Factory.FromAsync((cb, o) => ((HttpWebRequest)o).BeginGetResponse(cb, o), res => 
        ((HttpWebRequest)res.AsyncState).EndGetResponse(res), request); 
      var result = await task; 
      var response = result; 
      var stream = response.GetResponseStream(); 
      var sr = new System.IO.StreamReader(stream); 
     return sr; 
    } 

和:

public async Task<System.IO.TextReader> Login(string email, string password) 
    { 
     //User Credentials 
     WebClient client = new WebClient(); 
     var parms = new Dictionary<string, string>(); 
     parms.Add(email, password); 


     //Request 
     HttpWebRequest request = HttpWebRequest.CreateHttp(API_URL + "/login"); 
     request.AllowReadStreamBuffering = true; 
     request.Method = HttpMethod.Post; 
     // This doesn't seem to work 
     request.Credentials = new NetworkCredential(email, password); 
     var tr = await DoRequestAsync(request); 
     return tr; 
    } 
    private string DictToString(Dictionary<string, string> dict) 
    { 
     StringBuilder builder = new StringBuilder(); 
     foreach(KeyValuePair<string, string> kvp in dict) 
     { 
      builder.Append(kvp.Key + "=" + kvp.Value + "&"); 
     } 
     return builder.ToString(); 

    } 

欣赏的帮助

+1

为什么不使用'HttpClient'? – SLaks

+0

另外,您需要对您的值进行网址编码。 – SLaks

+0

看起来像HttpClient更容易。我想我会尝试,谢谢! – kjesle

回答

0

删除字符串.credentials,为的NetworkCredential是NTLM/Kerberos的,这里是API与一般的后

在发送请求之前加入:

request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    writer.Write("email=" + HttpUtility.UrlEncode(email)); 
    writer.Write("&password=" + HttpUtility.UrlEncode(password)); 
} 
相关问题