WebApi用于Get和Post的不同DTO

对于GET和POST操作,可以使用不同的DTO吗?

原因是这两种数据模型之间通常存在巨大差异。

例如:

我的POST看起来像这样:

///  /// Add new user ///  /// User data /// Newly added user id [HttpPost] public IHttpActionResult Post([FromBody] UserDto item) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var model = _mapper.Map(item); int itemid = _usersRepository.Insert(model); return Ok(itemid); } public class UserDto { private string _password; [Required] [StringLength(100, ErrorMessage = "Name {0} must consist of at least {2} letters.", MinimumLength = 6)] public string Name { get; set; } [Required] public string ExternalName { get; set; } [Required] public bool Active { get; set; } [Required] public string Password { get { return _password; } set { _password = value.Hash(); } } } 

我的GET看起来像这样:

 ///  /// Get all users ///  /// Users list [HttpGet] [ResponseType(typeof(List))] public IHttpActionResult Get() { IList values = _usersRepository.SelectAll(); if (values == null || !values.Any()) return Ok(); return Json(new { collection = values }); } public class UserInfoDto { public int Id { get; set; } public string Name { get; set; } public string ExternalName { get; set; } public bool Active { get; set; } } 

我这样做的原因是,在POST资源时我不需要Id,但需要密码。 使用GET时它是相反的。

这是使用WebApi(为响应和请求创建不同的Dtos)时的正确方法吗? 或者还有其他方法可以做到这一点吗?

对于GET和POST操作,可以使用不同的DTO吗?

对于不同的动作,有不同的dto是没有错的。

如果第三方正在使用api,您可能希望确保它已有详细记录。

这是使用WebApi时的正确方法吗?

这是否是正确的方法是一个意见问题。 公开或接受系统按预期执行的必要信息。

每个动作都可以使用自己独特的dto。 并不意味着它应该。 您希望确保没有泄漏超出必要的信息。