我是 Web Api/Rest API 概念的新手,但我计划使用 Visual Studio 2012 MVC4 Web Api。如何创建一个应用程序以通过 Twilio 接收文本/SMS 消息并将响应发回?我在这里和 Twilio 网站上搜索了几篇文章,但没有一篇文章让我了解如何使用 MVC4 Web Api。有人可以帮助我并展示/举一些例子吗?
2 回答
我真的不喜欢我发现的与 Web API 有关的任何文档,所以我想回答这个问题,即使它有点陈旧。
Twilio 将向您创建的端点发出 HTTP 请求(您可以在 Twilio 站点上选择 GET 或 POST 动词),并且您的 HTTP 响应(如果正文格式正确)将向用户发出 SMS 响应。我在此处底部显示 Twilio 配置屏幕截图。
我通常只从我的端点返回 json,但对于 Twilio,您必须返回 XML。将您的路由设置为具有扩展映射路由(这允许您设置一个 URL,该 URL 将为 Twilio 请求返回 XML)。这是必要的,因为 Twilio 不会在 Accept 标头中发布 text/xml。它们实际上确实有一个 Accept 标头,但它包含 */* 但会因 XML 以外的任何内容而失败:
config.Routes.MapHttpRoute(
name: "DefaultApiWithExtension",
routeTemplate: "xml/{controller}/{id}",
defaults: new { id = RouteParameter.Optional, ext="xml" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional}
);
config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "application/xml");
config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
现在使用包管理器控制台安装 TwiML nuget 包。这将仅用于 TwilioResponse 类。
Install-Package Twilio.TwiML
如果您愿意,可以添加此类,但如果您只想将参数放在控制器操作方法中,则不需要。
public class TwilioRequest
{
public string MessageSid { get; set; }
public string AccountSid { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Body { get; set; }
}
然后你的控制器动作是这样的:
public virtual HttpResponseMessage Get([FromUri]TwilioRequest request)
{
TwilioResponse tr = new TwilioResponse();
if (request.Body == "Hello World")
tr.Message("Hello back!");
else
tr.Message("Text 'Hello World' for a friendly message.");
return Request.CreateResponse(HttpStatusCode.OK, tr.Element);
}
或者,如果您不想使用我制作的 TwilioRequest 类:
public virtual HttpResponseMessage Get(string body)
{
TwilioResponse tr = new TwilioResponse();
if (body == "Hello World")
tr.Message("Hello back!");
else
tr.Message("Text 'Hello World' for a friendly message.");
return Request.CreateResponse(HttpStatusCode.OK, tr.Element);
}
最后要对其进行测试,您需要配置 Twilio 以向您的端点发出 GET 请求。这是发帖时他们网站上的样子:
请注意,配置 URL 中包含 /xml/controllername 模式。不过,您可以在浏览器、邮递员或 fiddler 中对其进行测试,然后再使用 Twilio 进行测试。如果工作正常,响应正文应如下所示:
<response>
<message>Hello Back!</message>
</response>
最后注意事项:
从技术上讲,您甚至不需要 TwiML 库,因为它只提供了一个序列化为 XML 的包装类,您可以在几分钟内编写自己的。此外,我发现在防火墙上打开一个端口,将 http 请求从 Twilio 直接发送到我的机器很有用,这样我就可以在 Twilio 正常工作时进行调试。
Twilio 布道者在这里。
我们所有的快速入门都翻译成使用 Razor 语法的 C#。您只需从页面顶部的语言下拉菜单中选择C# 。这是 C# SMS 快速入门的直接链接:
http://www.twilio.com/docs/quickstart/csharp/sms
此外,您可能想查看我不久前写的一系列博客文章,将 Twilio 介绍给 .NET 开发人员,包括一篇关于在 ASP.NET MVC 应用程序中使用 Twilio .NET 帮助程序库的文章:
- 面向 .NET 开发人员的 Twilio - 第 1 部分:介绍 Twilio Helper 库
- 面向 .NET 开发人员的 Twilio - 第 2 部分:将 Twilio Helper 库添加到您的项目
- 面向 .NET 开发人员的 Twilio - 第 3 部分:使用 Twilio REST API 帮助程序库
- 面向 .NET 开发人员的 Twilio - 第 4 部分:使用 Twilio.TwiML 帮助程序库
- 面向 .NET 开发人员的 Twilio - 第 5 部分:Twilio 客户端、MVC 和 WebMatrix Helper 库
- 面向 .NET 开发人员的 Twilio - 第 6 部分:使用 ASP.NET Web 窗体创建 SMS 和语音应用程序流
- 面向 .NET 开发人员的 Twilio - 第 7 部分:使用 ASP.NET MVC 的 SMS 和语音应用程序流
特别是有关回复短信的信息,您可能对第 1、2、4 和 7 部分最感兴趣。
最后,如果您点击 GitHub 上的 Twilio .NET 帮助程序库 wiki,那里有一些代码示例:
https://github.com/twilio/twilio-csharp/wiki
我还将向您指出开发人员 Long Le 为我们的博客撰写的一篇博客文章,该文章展示了如何使用 ASp.NET Web API 回复 Twilio 请求,因为这样做需要一些细节:
http://www.twilio.com/blog/2012/11/building-twilio-apps-using-asp-net-mvc-4-web-api.html
就我个人而言,我发现使用标准的 ASP.NET MVC 控制器更容易,但这只是我个人的偏好。
希望有帮助。