asp.net 如何使用.NET SDK从Twilio下载彩信媒体

093gszye  于 2023-02-01  发布在  .NET
关注(0)|答案(1)|浏览(166)

我有一个项目,我的团队正在努力发送和接收Twilio彩信。我们已经使用C# SDK中的Twilio客户端多年,成功地发送消息。现在有了这个项目,很清楚如何确定有媒体文件与彩信一起发送,并找到他们,但我们需要一些帮助下载他们。
我知道我们可以用C#编写代码并添加必要的身份验证,但我希望将我们所有的活动都保留在Twilio SDK和客户端中,这样我们当前或未来潜在的开发人员就可以轻松访问代码。有没有办法通过Twilio客户端下载文件?我在文档中没有看到任何示例。

vltsax25

vltsax251#

Twilio SDK可以帮助你定位彩信的media,媒体信息也会传递给你的webhook处理程序,但是SDK没有任何类/方法来帮助你下载媒体文件。
默认情况下,如果您知道URL,则可以公开访问该文件,并且不需要验证。您可以enable basic auth for your MMS media files,这样只有您可以通过使用帐户SID和验证令牌或API Key SID and API Key Secret进行验证来下载它们。
下面是一个C#示例,说明如何在使用和不使用基本身份验证的情况下下载文件:

using System.Net.Http.Headers;
using System.Text;

const string accountSid = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const string messageSid = "MMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const string mediaSid = "MExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var mediaUrl = $"https://api.twilio.com/2010-04-01/Accounts/{accountSid}/Messages/{messageSid}/Media/{mediaSid}";
const string localFilePath = "image.jpg";

using var httpClient = new HttpClient();
using var httpRequest = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri(mediaUrl)
};

const bool useBasicAuth = true;
if (useBasicAuth)
{
    var authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");
    var authHeaderValue = $"{accountSid}:{authToken}";
    authHeaderValue = Convert.ToBase64String(Encoding.ASCII.GetBytes(authHeaderValue));
    httpRequest.Headers.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValue);
}

using var response = await httpClient.SendAsync(httpRequest);

if (!response.IsSuccessStatusCode)
{
    Console.WriteLine($"HTTP Status Code: {response.StatusCode}");
    Console.WriteLine($"Response body: {await response.Content.ReadAsStringAsync()}");
    return;
}

await using var fileStream = new FileStream(localFilePath, FileMode.CreateNew);
await response.Content.CopyToAsync(fileStream);

相关问题