Web API模型属性为null

时间:2012-12-29 18:36:33

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

我的控制器能够创建模型对象,但所有属性都与模型相关并分配给空值

环境:VS 2010,ASP.NET MVC RC最新,jQuery 1.7.1

以下是Web API控制器代码

public class Customer
{
    public string Name { get; set; }
    public string City { get; set; }
}
public class UserController : ApiController
{
    public Customer Post(Customer user)
    {
        return user;
    }
}

以下是ajax调用代码

$.ajax('/api/user',
{
  ContentType: "application/x-www-form-urlencoded; charset=UTF-8",
  dataType: 'json',
  type: 'POST',
  data: JSON.stringify({ "Name": "Scott", "City": "SC" })
});

Controller会创建模型“Customer”对象,但“Name”和“City”属性都为null。

这里有什么问题?

我在这个网站上已经阅读了很多类似的问题,但找不到解决方案。

4 个答案:

答案 0 :(得分:2)

This blog这里提供了一个关于模型绑定在ASP.NET Web项目和ASP.NET Web API项目中有何不同的好主意。

我在我正在处理的项目中遇到了类似的问题,并添加了一个显式的ModelBinding属性,使得属性值保持不变

请求的数据:

var customer  = { Name : "customer Name", City : "custome City" }

$.ajax({ 
   url : ...
   type: ...
   data : customer
});

请求类:

public class Customer
{
    public string Name { get; set; }
    public string City { get; set; }
}

控制器:

public class UserController : ApiController
{
    [HttpGet]
    public Customer Get([ModelBinder] Customer user)
    {
        // fetch from whereever
    }
}

答案 1 :(得分:1)

我现在正在经历同样的问题。我不是100%肯定答案,但下面是我的javascript,我已经添加到类[DataModel]和属性[DataMember]。那就是:

    [DataModel]
    public class Customer
    {
      [DataMember] public string Name { get; set; }
      [DataMember] public string City { get; set; }
    }

和我的JavaScript

        $(document).ready(function () {
        // Send an AJAX request
        $.getJSON("api/session/GetAll",
        function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, val) {

                //debugger;

                // Format the text to display.
                //var str = val.Name + ': $' + val.Price;
                var str = 'abcd';

                // Add a list item for the product.
                $('<li/>', { text: str })
                .appendTo($('#products'));
            });
        });
    });

答案 2 :(得分:0)

面临类似的问题,我的问题在请求正文中被证明是无效的JSON。其中一个字段后有一个逗号丢失。因此,如果JSON中存在任何语法错误,则默认模型绑定器似乎只会绑定null。

答案 3 :(得分:0)

下次发生这种情况时,请确保属性设置器上没有“internal”关键字。那是: 而不是public string Comment {get; internal set;} 使用public string Comment {get; set;}

这为我解决了。