3

私は以下のASP.NETWebAPIコントロールを持っています:

public SomeObject GetBenchMarkData(Comment comment)
        {
            //do stuff
        }

クライアント側では、これを以下で試しています。

var comment = { ID: 0, Text: $('#text').val(), Author: $('#author').val(), Email: $('#email').val(), GravatarUrl: '' };
            var json = JSON.stringify(comment);
            $.getJSON("api/MintEIQAPI/" + json,

問題は、GetBenchMarkDataアクションが上記のgetJSONクエリで呼び出されないことです。

誰かが私を助けてくれませんか、私が間違っていることはありますか?

ありがとう。

4

2 に答える 2

17

デフォルトでは、GET を介して複合型を渡す場合、アクション パラメーターを FromUri 属性で装飾する必要があります。

クライアントで:

$.get('api/movies/test',
      {Name:'Henrique', Age:'24'}, 
      function (res) {
           console.log(res);
      }
);

コントローラーで:

public void Get([FromUri] Customer c)
{
    ...
}

このようにして、クエリ文字列からパラメーターを逆シリアル化するよう WebApi に指示しています。また、サーバーに渡されるオブジェクトを文字列化しないことに注意してください。

このブログ投稿では、WebApi と MVC のモデル バインディングの違いについて説明しています: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

于 2012-05-08T21:34:57.377 に答える
6

問題は、サーバーへのリクエストをgetJSON実行することです。GETオブジェクト全体を渡すには、 requestを実行する必要がありますPOST

GETの場合、jQuery Ajax 呼び出しに渡す JavaScript オブジェクトは通常、URL エンコードされたパラメーターに変換され、サーバー側のメソッドで個別に取得できます。

$.ajax({
  url: "/someurl/getbenchmarkdata",
  data: JSON.stringify({ filterValue: "test" }),
  type: "GET"
  ...

});

そしてあなたのサーバー側で

public SomeObject GetBenchMarkData(String filterValue)
{
   ...
}

代わりに、オブジェクト全体を送信する場合は、次のように ajax 呼び出しを POST として実行する必要があります。

$.ajax({
    url: "/someurl/benchmarkdata",
    type: "POST",
    data: JSON.stringify({ title: "My title"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    ...
});

Titleまた、サーバー側のメソッドは、 typeのプロパティを持つオブジェクトを受け取る必要がありますString

ここでも私のブログ記事が役立つかもしれません

于 2012-05-08T05:49:58.423 に答える