2013-11-01 24 views
5

私はWEB APIメソッドへの簡単なjquery ajax呼び出しを作成しようとしています。Jquery Ajax Web APIへの呼び出し

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() { 

     $.ajax({ 
      type: 'POST', 
      url: 'http://redrock.com:6606/api/values/get', 

      dataType: "jsonp", 

      crossDomain: true, 
      success: function (msg) { 

       alert("success"); 

      }, 
      error: function (request, status, error) { 

       alert(error); 
      } 
     }); 
    }); 

</script> 

WEB APIアクション:

public IEnumerable<string> Get() 
    { 
    return new string[] { "value1", "value2" }; 
    } 

AJAX呼び出しは、Web APIを打っていません。ブラウザのコンソールで以下のエラーが表示されます。

http://redrock.com:6606/api/values/get?callback=jQuery18207315279033500701_1383300951840&_=1383300951850 400(不正なリクエスト)をGET

答えて

2

あなたは、ルート設定のためのコードが含まれていないが、それが正しいと仮定すると、問題はおそらくあなたがあなたのWEBAPI方法を命名したことに起因する「ゲットあなたがPOST要求を使用してそれを打ちようとしている間。これは、WebApiがアクション名からHTTP動詞を把握しようとするために発生します。

アクションの名前を変更するか、アクションメソッドに[HttpPost]属性を追加することをお勧めします。 WebApiRouteDebuggerパッケージをお試しください。

+0

私はHttPostで試しましたが、運はありません – chamara

2

クロスドメインコールをしていない限り、jsonpを使用する必要はありません(jsonpはWeb APIでもカスタムフォーマッタが必要です)。

$.getJSON('http://redrock.com:6606/api/values', function(data){ 
    console.log(data); 
}); 

EDIT:

JSONPメディアタイプフォーマッタをインストールするには、このプロジェクトを見て:https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

  • はnuget
  • を使用してフォーマッタをダウンロードフォーマッタ
  • アップデートを登録あなたのrouteconfig
+0

こんにちは!クロスドメインコールを行う必要があります – chamara

+0

同じドメインから通常のgetを実行してjsonpのメディアタイプフォーマッタを設定したときに、APIからデータが返されますか? – Francis

+0

「json」と同じドメインとデータ型でURLを「/ controller/action」として使用すると動作します。私はjsonpフォーマッタについては全く考えていません – chamara

関連する問題