2013-10-25 68 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)); 
} 
相關問題