GETとPOSTアクションに異なるDTOを使用しても構いませんか?WebApi GetとPostのための異なるDTO
これは、通常、これら2つのデータモデルに大きな違いがあるためです。例えば
:
私のPOSTは次のようになります。
/// <summary>
/// Add new user
/// </summary>
/// <param name="item">User data</param>
/// <returns>Newly added user id</returns>
[HttpPost]
public IHttpActionResult Post([FromBody] UserDto item)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var model = _mapper.Map<User>(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は、次のようになります。
/// <summary>
/// Get all users
/// </summary>
/// <returns>Users list</returns>
[HttpGet]
[ResponseType(typeof(List<UserInfoDto>))]
public IHttpActionResult Get()
{
IList<UserInfoDto> 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; }
}
私はこれを行うだろう理由はIということですリソースをポストするときにIdが必要ではないが、パスワードが必要である。 GETを使用するときは逆になります。
WebApi(レスポンスとリクエストに異なるDtosを作成する)を使用する場合、これは正しいアプローチですか?あるいは、これを行うための他の方法がありますか?
これが正しいアプローチかどうかは、意見の問題です。意図したとおりにシステムが実行するために必要な情報を公開するか、受け入れる。各アクションは独自のdtoを使用できます。それがすべきことを意味するものではありません。 – Nkosi
マッピング手法を使用している場合は、標準に合わせてdtoのマッピングを変更できます。 –