web-dev-qa-db-ja.com

Jquery Ajax WEBAPIの呼び出し

WEBAPIメソッドに対して単純なjqueryajax呼び出しを行おうとしています。

<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呼び出しはWEBAPIにヒットしません。ブラウザコンソールで以下のエラーが発生します。

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

5
chamara

ルート設定のコードは含まれていませんが、それが正しいと仮定すると、POSTリクエスト。これは、WebApiがアクション名からHTTP動詞を理解しようとするために発生します。

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

2
elolos

クロスドメイン呼び出しを行っている場合を除き、jsonpを使用する必要はありません(jsonpにはWeb APIのカスタムフォーマッターも必要です)。

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

編集:

Jsonpメディアタイプフォーマッターをインストールするには、次のプロジェクトをご覧ください: https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

  • Nugetを使用してフォーマッターをダウンロードします
  • フォーマッターを登録する
  • Routeconfigを更新します
2
Francis