c# - 使用 twilio 发送 SMS 短信不起作用

标签 c# tdd twilio

我正在尝试从 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;
    }

最佳答案

您正在发出异步请求,但不等待结果。尝试:

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);

由于这会创建与您的内容 不同的请求主体,因此这可能是您的“错误请求”错误的原因。执行此操作的两种编码特殊字符的方式非常不同,& 分隔部分和字符串本身。例如

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

关于c# - 使用 twilio 发送 SMS 短信不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950415/

相关文章:

c# - 更新面板内的 Gridview PageIndex 未在单击按钮时维护

sql-server - 使用 tSQLt 对计算列进行单元测试

c# - 通过针对接口(interface)编程来保留数据

ios - 即使应用程序在 swift 4 中处于事件状态,调用屏幕也会在接受 twilio 语音调用时关闭

python - 在服务器中使用 twilio 时出现导入错误 : No module named twilio. 休息

c# - 查询文档并过滤嵌套字符串列表(即标签)中的特定值

c# - OpenCL 和 GPU 编程路线图

c# - 将 WPF 文本设置为 TextBlock

tdd - TDD 和 BDD 应该一起使用吗?

ios - 使用 Twilio iOS 客户端 SDK 检测语音通话断开