簡體   English   中英

部分更新期間ASP.NET Web API中的顯式vs.隱式null

[英]Explicit vs. implicit null in ASP.NET Web API during partial updates

在過去的幾周中,我一直在嘗試使用Web API 2,並且我試圖找出在部分更新期間處理特定場景的最佳方法。

該API將允許用戶通過POST進行部分更新。 通過設計,請求主體中未提供的任何屬性都假定為不變,並且不會對這些屬性進行任何更改。

但是,挑戰在於嘗試確定用戶何時將屬性值顯式設置為null。 通過控制器拉入請求正文時,隨着反序列化JSON請求正文,所有不存在的屬性都會自動設置為null。 因此,我無法確定屬性值是否顯式為null(即,用戶試圖將屬性值設置為null,在這種情況下,我想將屬性更新為null),或者屬性值隱式為null (即在反序列化期間將屬性值設置為null,在這種情況下,我想忽略它)。

我正在尋找有關如何應對這種情況的任何想法。

我對此進行了一些嘗試,並提出了解決此問題的方法。 也許還有另一種方法可以解決該問題,但這似乎是一種合理的方法:

在Web API中,請求正文只能讀取一次。 因此,如果讓控制器為您拉入對象,則該對象將被反序列化,並且您將失去對原始請求內容的訪問權限,並且將無法確定某些內容明確為空還是不存在。 這可以通過以下示例得到證明:

[Route("cars"), HttpPost]
public IHttpActionResult AddCar(Car car)
{
Car newCar = Car.Add(car);
return Created<Car>("/cars/" + newCar.car_id, newCar);
}

如果您希望能夠准確檢查發送的內容,則不必讓控制器為您拉入對象,而是手動拉入請求正文,從而保留了准確查看發送的內容的能力,像這樣:

[Route("cars"), HttpPost]
public IHttpActionResult AddCar()
{
HttpContent content = Request.Content;
string carJson = content.ReadAsStringAsync().Result;

// You now have the original JSON and can examine it before deserialization

}

它當然增加了一些步驟,但是至少在我需要能夠准確查看POST內容的情況下,這提供了一個似乎可行的解決方案。

暫無
暫無

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

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