影片講解
在Restful風格裡面,對於刪除多筆資料似乎沒有特別去規範說網址格式是如何。所以如果要符合規範就有可能要在前端去跑迴圈,一筆一筆的送出刪除的Resqust,那這樣鐵定不是一個好的方式,因為如果同時要刪除100資料那就要Resqust一百次,不僅會造成伺服器的負擔,效率上也不會太好。
因此或許我們可以跳脫規範,自己設計一個能夠接受的格式來進行多筆指定資料的刪除動作。那我們路由的部分就設為[HttpDelete("list/{ids}")]
。接受值得部分就單純接收字串就好public List<Guid> Delete(string ids)
。
接著我們再利用JsonSerializer,從string將他轉成List。
List<Guid> deleteList = JsonSerializer.Deserialize<List<Guid>>(ids);
那位什麼不一開始就接收List<Guid> ids
呢?其實是可以的,但由於在預設中並沒有針對路由進行List轉換的程式,因此會無法正確執行轉換而415失敗,那這邊解決的部分可透過自行撰寫轉換程式即可解決,但今天只是進行簡單的示範應用,所以就不先教這一部分。
接著我們在用Contains,把所有包含在其中的id都給撈出來,最後再使用RemoveRange進行刪除就完成了,以下完整程式碼。
[HttpDelete("list/{ids}")]
public List<Guid> Delete(string ids)
{
var deleteList = JsonSerializer.Deserialize<List<Guid>>(ids);
var delete = (from a in _todoContext.TodoLists
where deleteList.Contains(a.TodoId)
select a).Include(c => c.UploadFiles);
_todoContext.TodoLists.RemoveRange(delete);
_todoContext.SaveChanges();
return deleteList;
}
以上就是這篇的簡單示範,想看詳細操作的話可以看影片。
新手分享學習成果,若有錯誤,煩請告知修正,感謝🙏