0

twilio が着信 SMS のために POST 経由で REST API URL にアクセスしようとすると、エラーが表示されます。

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

このエラーは何ですか?また、その修正方法は? エラーは私のサーバーまたは Twilio 側から発生していますか? 私の側に何かが欠けていますか?ここに示すようにTwilio Webサイトを見る:

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 はそれは良くないと言います。

応答を XML としてフォーマットするように Web API に指示する方法はいくつかあります。1 つ目は、Web API で使用できるオプションとして JSON フォーマッターを削除することです。この SO 投稿は、使用可能なフォーマッターのコレクションから json メディア タイプ フォーマッターを削除する方法を示しています。

ASP.NET MVC Web API で JSON サポートを無効にする

もう 1 つのオプションは、AddUriPathExtensionMapping メソッドを使用して、Accept ヘッダーの代わりに、使用するフォーマッターを決定する方法としてファイル拡張子を使用するように Web API に指示することです。

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

この行は、.xml 拡張子を持つエンドポイントへのすべての要求を text/xml メディア タイプ応答の要求として扱うように Web API に指示します。

これを行う場合は、Web API ルートも更新して、拡張を許可する必要があります。

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

それが役立つことを願っています。

于 2013-08-10T01:04:59.423 に答える