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”将为空。

4

3 回答 3

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 回答
2

ASP.NET Web API 中的绑定与 ASP.NET MVC 并不完全相同。

然而,在 ASP.NET Web API 中,正文内容被视为只能读取一次的只进流。因此,在操作上的复杂签名的情况下,您需要指定您期望参数的位置。

如果您从正文中获取参数,请将签名更改为:

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 回答
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 回答