Web API模型绑定无法正常工作

时间:2014-11-21 08:38:34

标签: asp.net-web-api model-binding

为什么默认情况下Web API模型绑定如此复杂: 我尝试了很多组合,但似乎都没有。 这是ajax请求:

var dataString = JSON.stringify({
            request: Request
        });
var request = Request;
$.ajax({
        type: "POST",
        data: '='+dataString,
        // contentType: 'application/x-www-form-urlencoded',
        contentType: "application/json; charset=utf-8",
        dataType: "json",

这是控制器:

public AccResultObject Post(string jezik, string page, string size, string sort,AccRequestViewModel model)

这是AccRequestViewModel

public class AccRequestViewModel
{
    public AccRequestObject request { get; set; }
}

这是AccRequestObject:

public class AccRequestObject
    {

        public int FM { get; set; }
        public int Budget { get; set; }
        public string WebCatID { get; set; }


        public int Distance { get; set; }
    }

无论我做什么,控制器都会获得空值。

我也试过这个。这似乎很合乎逻辑:

 var dataString = JSON.stringify({
            request: Request
         });
 $.ajax({
        type: "POST",
        data: dataString, ...

和控制器接收AccRequestObject:

  public AccResultObject Post(string jezik, string page, string size, string sort,[FromBody] AccRequestObjectmodel)

除了这个小问题外,它的效果很好。值没有绑定。

2 个答案:

答案 0 :(得分:1)

确保您在javascript中创建的每个对象的属性与代码模型完全匹配。如果属性名称在代码模型中是大写的,则它必须在js中为大写。除此之外,将带有jquery的模型发布到Web Api控制器非常简单:

//code model
public class MyModel{
    public int MyProperty{get;set;}     
}

//js
$.ajax({
        contentType: "application/json",
        dataType: 'json',
        url: 'http://api/to/my/controller',
        data: JSON.stringify({MyProperty: 1}),
        type: "POST"
    });

答案 1 :(得分:0)

在C#中,确保您的属性为properties,而不是fields

public class MyBindingModel
{
    string myProp{ get; set; }
}