2013-09-23 39 views
1

我想從C#單元測試代碼發送短信,但我沒能收到短信,我不知道在哪裏可以調試此。發送短信使用消息twilio不工作

而且,我的反應對象的內部,我得到的值「錯誤的請求」。我究竟做錯了什麼。 也在while循環中,我等待響應被處理。

這是我的代碼。

[TestMethod] 
    public void TestMethod1() 
    { 
     Assert.IsTrue(SendMessage("+1MYFROMPHONENUMBER", "+1MYTOPHONENUMBER", "sending from code")); 
    } 

    public bool SendMessage(string from, string to, string message) 
    { 
     var accountSid = "MYACCOUNTSIDFROMTWILIOACCOUNT"; 
     var authToken = "MYAUTHTOKENFROMTWILIOACCOUNT"; 
     var targeturi = "https://api.twilio.com/2010-04-01/Accounts/{0}/SMS/Messages"; 
     var client = new System.Net.Http.HttpClient(); 
     client.DefaultRequestHeaders.Authorization = CreateAuthenticationHeader("Basic", accountSid, authToken); 
     var content = new StringContent(string.Format("From={0}&To={1}&Body={2}", from, to, message)); 
     content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); 
     var result = false; 
     var response = client.PostAsync(string.Format(targeturi, accountSid), content).Result; 
     do 
     { 
      result = response.IsSuccessStatusCode; 
     } while (result == false); 
     return result; 
    } 

回答

4

您正在發出異步請求,但沒有等待結果。嘗試:

var response = client.PostAsync(..).Result; 
return response.IsSuccessStatusCode; 

另外,你應該能夠更容易地/格式化參數安全使用FormUrlEncodedContent類型,而不是StringContent。它似乎是支持你想要做的。例如。

var dict = new Dictionary<string, string> 
    { { "From", from }, { "To", to }, { "Body", message } }; 
var content = new FormUrlEncodedContent(dict); 

而且因爲這將創建一個不同的身體要求比你content,這可能是你的「錯誤的請求」錯誤的原因。這樣做的兩種方式編碼特殊字符,&分開部分和字符串本身,有很大不同。例如。

string from = "+1234567890", to = "+56789", message = "hi & bye+2"; 
//FormUrlEncodedContent results: 
From=%2B1234567890&To=%2B56789&Body=hi+%26+bye%2B2 
//StringContent results: 
From=+1234567890&amp;To=+56789&amp;Body=hi & bye+2 
+0

我編輯我的問題。 –

+0

@ DOTNET-從業者從[twilio文檔】(http://www.twilio.com/docs/api/rest/request),錯誤的請求的意思是「在給定的POST或PUT驗證失敗的數據,檢查響應主體瞭解詳情。「看看這個響應組織,讓我知道你是否還有問題。而擺脫'do..while'循環,這不是做你任何好處:你以後再'await'或做'.Result',要求做,並沒有什麼都不會改變。 –

+0

@ dotnet-practitioner我已經添加了一個使用FormUrlEncodedContent的建議。這會產生與你的'StringContent'代碼不同的請求。這可能是您的「錯誤請求」錯誤的原因。 –