防止在POST调用中指定id

时间:2014-07-22 05:43:23

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

我希望通过WebAPI中的POST调用创建一个EF实体。

控制器方法应如下所示:

[ResponseType(typeof(entity))]
public IHttpActionResult Post(entity e)
{
   ...
}

entity类包含ID的属性,即自动增量主键。

我不希望使用设置了Post属性的实体对象调用ID方法。

我可以使用哪些方法来停止发布包含主键的创建对象?

1 个答案:

答案 0 :(得分:1)

让我看看我是否理解正确...你想:

  1. 对您的Web API服务执行POST
  2. 传递整个预先填充的EF entity ,不含 ID字段作为参数,
  3. 在从数据库中分配自动递增的值后,返回填充了ID字段的同一实体?
  4. 如果上述内容听起来至少接近您想要的内容,那么我说这是一个常见的问题,但您会以一种不寻常的方式解决这个问题。

    让我们说entity看起来像这样:

    public class entity
    {
        public long ID { get; set; }
        public string firstname { get; set; }
        public string lastname { get; set; }
    }
    

    所以,现在让我解释一下你看到它们的选择:

    1. 如果您的entity对象非常简单,那么您可以通过添加firstname属性来传递URI中的lastname[FromUri]参数方法定义中的所有参数,并调整客户端代码以将此信息作为URI中的查询字符串传递。

    2. 如果您的entity对象比上面的简单示例复杂得多,那么您可以创建一个DTO(数据传输对象),其中包含您需要传递到数据库的所有EF模型参数创建entity ,除了 ID,在这种情况下只是firstnamelastname,并将其传递给Post方法作为([FromBody])参数并调整您的客户端代码以在请求正文中传递此信息(可能是简单的JSON)。

    3. 然后您可以从数据库而不是整个entity返回 自动递增的ID,因为您已经拥有所有其他信息(因为您已将其传递给您service' Post方法作为参数!)。