4

我是 Web Api/Rest API 概念的新手,但我计划使用 Visual Studio 2012 MVC4 Web Api。如何创建一个应用程序以通过 Twilio 接收文本/SMS 消息并将响应发回?我在这里和 Twilio 网站上搜索了几篇文章,但没有一篇文章让我了解如何使用 MVC4 Web Api。有人可以帮助我并展示/举一些例子吗?

4

2 回答 2

12

我真的不喜欢我发现的与 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 正常工作时进行调试。

于 2015-09-17T20:42:59.103 回答
2

Twilio 布道者在这里。

我们所有的快速入门都翻译成使用 Razor 语法的 C#。您只需从页面顶部的语言下拉菜单中选择C# 。这是 C# SMS 快速入门的直接链接:

http://www.twilio.com/docs/quickstart/csharp/sms

此外,您可能想查看我不久前写的一系列博客文章,将 Twilio 介绍给 .NET 开发人员,包括一篇关于在 ASP.NET MVC 应用程序中使用 Twilio .NET 帮助程序库的文章:

特别是有关回复短信的信息,您可能对第 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 控制器更容易,但这只是我个人的偏好。

希望有帮助。

于 2013-07-20T01:21:28.413 回答