FromBody不绑定Inherited Id

时间:2017-12-02 14:35:36

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

客户类继承自实体,其中" Id"物业是可用的。但每当我向控制器发布一个JSON对象时,所有属性除了" Id"将启动。 "标识"总是0

你有什么想法有什么不对吗?

public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
    public TId Id { get; protected set; }
}

public class Customer : Entity<int>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

  //Controller
public void Post([FromBody] Customer customer)
{
    if (customer.Id > 0)
        _customeRepository.Update(customer);

    _customeRepository.Insert(customer);
}

1 个答案:

答案 0 :(得分:0)

Id属性没有公共setter,这就是为什么在数据绑定期间无法设置它的原因。使setter公开并正确设置其值:

public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
    public TId Id { get; set; }
}

注意:在这种情况下不需要FromBody属性,因为默认情况下Customer类型的参数将从请求正文绑定。