0
// Server-side Model to bind

    public class CurrentPipelineRequest
    {
        public List<string> Usernames { get; set; }
    }

// Controller

[HttpPost]
public HttpResponseMessage CurrentPipelineByMilestone(CurrentPipelineRequest currentPipelineRequest)
{
    //.....
}

// Jquery/Ajax

   var model = {
            'Usernames' : JSON.stringify(["me", "you", "I"])
        };
    $.ajax({
        contentType: 'application/json',
        type: 'POST',
        url: 'api/Dashboard/CurrentPipelineByMilestone'
        data: model,
        success: function (data) {
            alert('success');
        }
});

現在、コントローラー アクション パラメーター「currentPipelineRequest」は null になります。

4

3 に答える 3

2

ASP.NET Web API でのバインドは、ASP.NET MVC とまったく同じではありません。

ただし、ASP.NET Web API では、本体のコンテンツとして、1 回しか読み取れない転送専用ストリームとして扱われます。したがって、アクションの複雑な署名の場合は、パラメーターを期待する場所を指定する必要があります。

本体からパラメーターを取得している場合は、署名を次のように変更します。

public HttpResponseMessage CurrentPipelineByMilestone(
      [FromBody] CurrentPipelineRequest currentPipelineRequest)

uri からパラメーターを取得している場合は、署名を次のように変更します。

public HttpResponseMessage CurrentPipelineByMilestone(
      [FromUri] CurrentPipelineRequest currentPipelineRequest)

uri と body からパラメーターを取得している場合は、署名を次のように変更します。

public HttpResponseMessage CurrentPipelineByMilestone(
      [ModelBinder] CurrentPipelineRequest currentPipelineRequest)

Web API で MVC スタイル バインディングを実装しようとする記事は次のとおりです。私自身は試していませんのでご了承ください。

于 2013-05-16T15:10:06.180 に答える
2

stringifyのみではなく、モデル全体が必要ですUsernames

var model = {
        Usernames : ["me", "you", "I"]
    };

$.ajax({
    contentType: 'application/json',
    type: 'POST',
    url: 'api/Dashboard/CurrentPipelineByMilestone'
    data: JSON.stringify(model),
    success: function (data) {
        alert('success');
});
于 2013-05-16T15:12:00.047 に答える
0

これは実際には、POST を実行していて、モデルを JSON オブジェクトとして送信していないためです。そのため、サービスはそれを理解できません。

これを試して:

var model = {
            'Usernames' : ["me", "you", "I"]
        };

var data = JSON.stringify(model);

$.ajax({
    contentType: 'application/json',
    type: 'POST',
    url: 'api/Dashboard/CurrentPipelineByMilestone'
    data: data,
    success: function (data) {
        alert('success');
    }

});

于 2013-05-16T15:12:43.783 に答える