1

C# 単体テスト コードから SMS メッセージを送信しようとしていますが、テキスト メッセージを受信できず、これをデバッグする場所がわかりません。

また、応答オブジェクト内で、「Bad Request」という値を取得します。私は何を間違っていますか。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

1 に答える 1

4

非同期リクエストを行っていますが、結果を待っていません。試す:

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

FormUrlEncodedContentまた、の代わりに typeを使用して、パラメータをより簡単/安全にフォーマットできるはずですStringContent。あなたがやろうとしていることをサポートするために作られているようです。例えば

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

これにより、 とは異なるリクエスト本文が作成されるcontentため、これが「Bad Request」エラーの原因である可能性があります。これを行う 2 つの方法は、特殊文字をエンコードします。両方の&'s は、部分と文字列自体を分離しますが、まったく異なります。例えば

string from = "+1234567890", to = "+5678901234", message = "hi & bye+2";
//FormUrlEncodedContent results:
From=%2B1234567890&To=%2B5678901234&Body=hi+%26+bye%2B2
//StringContent results:
From=+1234567890&amp;To=+5678901234&amp;Body=hi & bye+2
于 2013-09-23T01:44:59.653 に答える