2

私は Jquery と Jqgrid を使用して MVC 4 Web Api に取り組んでいますが、これまでポスト コントローラー アクションに複数のデータを投稿していました。

私の行動は以下のように見えました...

[ActionName("FetchProducts")]
public List<ABC> PostProducts(Product model)
{
    return _service.GetSomething(model);
}

public class Product{
    public string Name {get;set;}
    public string Category {get;set;}
    //.... and alteast 5 more properties
}

私のjquery呼び出しは以下のようなものでした...

$.ajax({  
type: "POST",  
url: /api/FetchProduct,  
data: this.getData(),  
contentType: "application/json; charset=utf-8",
dataType: "json",
success: callback
});

function getData(){
    return JSON.stringify({
            Name: "from somewhere" ,
            Category: "from somewhere",
            Price: "from somewhere",
            ABC: "from somewhere",
            XYZ: "from somewhere",
            //... and many more....
        }); 
}

そしてこれはうまくいきます!でも職場の友達が言ってた

私は実際にはデータを取得しているだけなので、「POST」ではなく「GET」を使用する必要があります。GET はリモート データの取得に使用され、POST はリモート データの挿入/更新に使用されます。

そして私も彼が正しいと感じています。では、「GET」でこれを行うにはどうすればよいですか?

これらすべてのパラメーター (少なくとも 10 個あります) をクエリ文字列として渡す必要がありますか?

例のように:api/FetchProduct/?Name='aaa'&&Category='vvv'&&.........

だから私の質問は、そのようなシナリオで何をすべきかということです? 他の開発者がこれについてどう考えているか知りたいです。ありがとう

4

4 に答える 4

2

クエリ文字列が大きくなると、ブラウザに依存する URL の最大長に関する問題が発生します。

渡すパラメーターが多数ある場合は、実際にデータを取得するだけであっても、POST は完全に受け入れられます。ただし、ユーザーが特定のページにクエリ文字列をブックマークする機能は失われます。

絶対に GET を使用してはならないケースの 1 つは、渡すパラメーターのいずれかが重要な場合です。

于 2012-10-17T13:48:59.683 に答える
1

一般的に言えば、あなたの友人は正しいです。POST の代わりに GET を使用すると、キャッシュの利点も得られます。get に切り替えるには、コードを post から get に更新するだけです。

$.ajax({  
  type: "GET",  
  url: "/api/FetchProduct",  
  data: this.getData(),  
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: callback
});

@MattBurland は、GET と POST をいつ使用するかについてもいくつかの良い点を挙げています。

編集: これはjsfiddleの例です。送信されるリクエストは、予想どおり「/echo/json/?value1=1&value2=2」です。

于 2012-10-17T13:50:40.803 に答える
0

POST の代わりに GET を使用する場合。あなたのコードは以下のはずです。

$.ajax({  
  type: "GET",  
  url: "/api/FetchProduct",  
  data: this.getData(),  
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: callback
});

そして行動は

[ActionName("FetchProducts")]
public List<ABC> PostProducts([FromUri]Product model)
{
    return _service.GetSomething(model);
}

注意:ポイントは【FromUri】です。

于 2012-10-17T16:22:53.840 に答える