应该在CreatedAtRoute方法中使用哪个DTO

时间:2016-08-09 12:07:04

标签: c# asp.net-web-api2 restful-architecture

我的产品实体有两个DTO: ProductGetDto ProductCreateDto

ProductGetDto 包含 Id 名称 IsActive CreatedBy CreationDate ModifiedBy ModificationDate 属性。

ProductCreateDto 包含名称 IsActive CreatedBy 属性。

我在ProductController(Web API 2控制器)中使用以下代码:

[ResponseType(typeof(ProductGetDto))]
public IHttpActionResult PostProduct(ProductCreateDto productCreateDto)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

    ProductCreate productCreate = Mapper.Map<ProductCreate>(productCreateDto);

    Guid productId = productManager.Create(productCreate);

    ProductGet productGet = productManager.GetById(productId);

    ProductGetDto productGetDto = Mapper.Map<ProductGetDto>(productGet);

    return CreatedAtRoute("DefaultApi", new { id = productGetDto.Id }, productGetDto);
}

我不知道这是否正确。

我可以在CreatedAtRoute方法中使用 ProductCreateDto 模型吗?这可能是准确的方法吗?我不想再次打电话给 productManager.GetById(productId) ProductGetDto 包含所有属性,但 ProductCreateDto 没有。

GetProducts() GetProduct(id)方法,其中ProductController返回 ProductGetDto 。如果我在 PostProduct(ProductCreateDto productCreateDto)中返回 ProductCreateDto ,这是错误的吗?

我很抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

为什么不为此API端点使用单一模型:Product(Dto)?它可以很容易地与ProductGetDto相同,因为它包含ProductCreateDto也需要的所有字段。

否则它看起来很好。