0

当 twilio 尝试通过 POST 访问我的 REST API URL 以获取传入的 SMS 时,我看到了错误。

 "An attempt to retrieve content from returned the HTTP status code 502. Please check the URL and try again.  

这是什么错误以及如何解决?错误来自我的服务器还是 Twilio 端?我错过了什么吗?查看此处给出的 Twilio 网站:

http://www.twilio.com/docs/errors/11200

它说明了我们需要设置 Content-Header。那么我该怎么做呢?Web Api 和 twiml 的新手。

编辑:

这就是我目前在我的 webapi.config 下的内容

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",  
            defaults: new { id = RouteParameter.Optional }
        ); 

我的路线配置有

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}", 
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

我在 Global.asax 中添加了以下内容

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);

       GlobalConfiguration.Configuration.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "text/xml");
        GlobalConfiguration.Configuration.Formatters.XmlFormatter.AddUriPathExtensionMapping("json", "application/json");

        BundleConfig.RegisterBundles(BundleTable.Bundles);

     }

如果我在我的 webapi.config 中添加 {action}.ext,我会收到 404 错误。所以现在我错过了什么:-(

4

1 回答 1

1

Twilo 布道者在这里。

因此,Web API 通过查看传入请求中的 Accept 标头来确定如何序列化从端点(JSON、XML 等)返回的数据。它还将根据返回的数据格式设置 Content-Type 标头。问题是 Twilio 的 Web 挂钩请求不包含 Accept 标头,如果没有 Accept 标头,Web API 默认返回 JSON。

Twilio 期望 TwiML(我们基于 XML 的语言)响应其请求,因此如果您的 Web API 端点返回 JSON Twilio 并在对 application/json 的响应中设置 Content-Type 标头,Twilio 说那很糟糕。

有几种不同的方法可以告诉 Web API 将响应格式化为 XML。第一个是删除 JSON 格式化程序作为 Web API 可用的选项。这篇 SO 帖子向您展示了如何从可用格式化程序集合中删除 json 媒体类型格式化程序:

在 ASP.NET MVC Web API 中禁用 JSON 支持

另一种选择是告诉 Web API 使用文件扩展名作为确定使用哪个格式化程序的方式,而不是使用 AddUriPathExtensionMapping 方法的 Accept 标头:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "text/xml");

该行告诉 Web API 将对其端点具有 .xml 扩展名的任何请求视为对 text/xml 媒体类型响应的请求。

如果您这样做,您还必须更新您的 Web API 路由以允许扩展:

api/{controller}/{action}.{ext}/{id}

希望有帮助。

于 2013-08-10T01:04:59.423 回答