我從Web API開始(我已經離開web dev一段時間了,似乎沒有人在意SOAP),但是我遇到了一些麻煩試圖放棄。PUT在Web API中總是會把「0」放到服務器上
我跟着一個在線教程,它適用於GET和DELETE。爲了測試,我使用郵差,因爲這將從另一個服務,這也是與郵差測試。下面是獲得代碼:
獲取所有的書:
// GET: api/Books
public IEnumerable<Book> Get()
{
return Library.Books;
}
通過ID獲取書:
// DELETE: api/Books/<int>
public IHttpActionResult Delete(int id)
{
Book book = Library.Books.FirstOrDefault(l => l.ID == id);
if (book != null)
{
Library.Books.Remove(book);
return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK));
}
else
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.NotFound, "Book not found."));
}
它們都運行良好:
// GET: api/Books/<int>
public IHttpActionResult Get(int id)
{
Book book = Library.Books.FirstOrDefault(l => l.ID == id);
if (book != null)
return ResponseMessage(Request.CreateResponse<Book>(HttpStatusCode.OK, book));
else
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.NotFound, "Book not found."));
}
通過ID刪除書並將服務於我的目的,因爲我必須返回一個對象列表,所以一切都很好。
BTW,http://localhost/api/Books/1
作品被選中GET或DELETE時相當不錯(我並不真的需要進入郵遞員的內部運作現在)
但我已經改變了PUT方法,因爲我只需要發送一些int(一個地址)給這個服務。下面是測試代碼:
// PUT: api/Books/<int>
public IHttpActionResult Put([FromBody]int address)
{
if (address == 0)
return ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.BadRequest, "Value cannot be zero"));
else
return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK));
}
調試時,參數「地址」永遠是零,如果稱爲這樣:http://localhost/api/Books/80
,或任何其他INT。換句話說,我對PUT的迴應將始終是「值不能爲零」。我嘗試刪除[FromBody]
並將[HttpPut]
屬性添加到PUT方法,但這隻會讓事情變得更糟。我知道這很新鮮,但就像我說的,我在很久以前就沒有處理過網絡開發。請指教。
這不是PUT的工作原理。你需要部分或全部資源被更新,所以'{「Housenumber」:「42」}'。正如您從屬性中看到的那樣,整數是從主體讀取的。在這種情況下,你的請求體應該就是:一個名爲address的整數,所以'{address:42}'。 – CodeCaster