簡體   English   中英

在 PUT 方法中一起傳遞 id 和 model 的最佳方法是什么?

[英]What is the best approach to pass an id and model together in PUT method?

我正在編寫一個 asp.net webAPI 應用程序,我想知道:傳遞 id 和 updatedModel 的最佳方法是什么? 讓我們考慮一下,現在我有這樣的方法:

[Authorize(Policy = "WriteAccess")]
[HttpPut("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
public async Task<ActionResult> PutCategory(Guid id, CategoryDTO categoryDTO)
{
}

如果您的 DTO class 中有 Id 屬性,您將傳遞 id 兩次(作為參數 Guid id 以查找要更新的實體,以及作為 DTO 實體的一部分)。 如果前端調用我的 API 時出錯,我必須在 id 和 DTO.Id 不同時捕獲此類情況。 編寫接受 id 和帶有 Id 道具的 DTO 的 PUT 方法的“正確”或推薦方法是什么? 如果對於這種情況沒有推薦的方法,我應該避免在 DTO 中使用 Id,還是應該為 PUT 方法創建一個額外的 DTO? 如有疑問,我的 DTO 就是這么簡單:

public class CategoryDTO
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string CategoryDescription { get; set; }
}

想到的第一個解決方案是有條件地設置它們(如果它們尚未設置)。

public async Task<ActionResult> PutCategory(Guid id, CategoryDTO categoryDTO)
{
  categoryDTO.id ??= id; // set if categoryDTO.id not set
  id = categoryDTO.id; // sync both values
}

我會在 DTO 中發送 Id,而不是將其作為單獨的字段發送。 所以方法如下:

[Authorize(Policy = "WriteAccess")]
[HttpPut("{id}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
public async Task<ActionResult> PutCategory(CategoryDTO categoryDTO)
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM