Dit*_*tty 4 sms twilio asp.net-web-api
我是Web Api/Rest API概念的新手,但我打算使用Visual Studio 2012 MVC4 Web Api.我是如何创建一个应用程序通过Twilio接收文本/ SMS消息并发回响应?我在这里和Twilio网站上搜索了几篇文章,但没有一篇能给我任何关于如何使用MVC4 Web Api的见解.有人可以帮助我并展示/举一些例子吗?
Que*_*esi 12
我真的不喜欢我发现的有关Web API的任何文档,所以我想回答这个问题,即使它有点陈旧.
Twilio将向您创建的端点和您的HTTP响应发出HTTP请求(您可以在Twilio站点上选择GET或POST谓词),如果正文形成正确,将向用户发出SMS响应.我在这里显示底部的Twilio配置屏幕截图.
我通常只从我的端点返回json,但对于Twilio,你必须返回XML.将路由设置为具有扩展映射路由(这允许您设置将为Twilio请求返回XML的URL).这是必要的,因为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");
Run Code Online (Sandbox Code Playgroud)
现在使用包管理器控制台安装TwiML nuget包.这将仅用于TwilioResponse类.
Install-Package Twilio.TwiML
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以添加此类,但如果您只想将params放在控制器操作方法中,则不需要.
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后你的控制器动作是这样的:
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);
}
Run Code Online (Sandbox Code Playgroud)
或者如果您不想使用我制作的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);
}
Run Code Online (Sandbox Code Playgroud)
最后,为了测试它,您需要配置Twilio以对端点执行GET请求.这是在发布时他们网站上的样子:
请注意,配置URL中包含/ xml/controllername模式.您可以在使用Twilio进行测试之前在浏览器,邮递员或提琴手中进行测试.如果正常工作,响应正文应该看起来像这样:
<response>
<message>Hello Back!</message>
</response>
Run Code Online (Sandbox Code Playgroud)
最后的说明:
从技术上讲,您甚至不需要TwiML库,因为它只提供了一个序列化为XML的包装类,您可以在几分钟内编写自己的包装类.此外,我发现在防火墙上打开一个端口是非常有用的,该端口直接从Twilio向我的机器发送http请求,以便我可以在Twilio正常工作时进行调试.