Alıştırma - CRUD işlemleri uygulama
Envanterimizden pizza oluşturma (), güncelleştirme (POSTPUT) ve silme (DELETE) özelliği eklemek için web API denetleyicimizi genişletmeye devam edelim.
Bir pizza ekle
Şimdi bir yöntemi kullanarak POST web API'si aracılığıyla pizza eklenmesini etkinleştirelim.
// POST action içindeki Controllers/PizzaController.cs açıklamasını aşağıdaki kod ile değiştirin:
[HttpPost]
public IActionResult Create(Pizza pizza)
{
PizzaService.Add(pizza);
return CreatedAtAction(nameof(Get), new { id = pizza.Id }, pizza);
}
Yukarıdaki eylem:
- Özniteliği tarafından belirtildiği gibi yalnızca HTTP
POSTfiiline[HttpPost]yanıt verir. - İstek gövdesinin
Pizzanesnesini bellek içi önbelleğe ekler.
Not
Denetleyici [ApiController] özniteliğiyle açıklandığından, Pizza parametresinin istek gövdesinde bulunacağı örtülü olarak belirtilir.
CreatedAtAction yöntem çağrısındaki ilk parametre bir eylem adını temsil eder. Eylem adının sabit kodlanmasını önlemek için nameof anahtar sözcüğü kullanılır.
CreatedAtAction önceki ünitede açıklandığı gibi, yeni oluşturulan pizzanın URL'sine sahip bir HTTP yanıt üst bilgisi oluşturmak location için eylem adını kullanır.
Pizzayı değiştirme
Şimdi bir yöntemi kullanarak PUT web API'si aracılığıyla bir pizzanın güncelleştirilmesine olanak tanıyalım.
// PUT action içindeki Controllers/PizzaController.cs açıklamasını aşağıdaki kod ile değiştirin:
[HttpPut("{id}")]
public IActionResult Update(int id, Pizza pizza)
{
if (id != pizza.Id)
return BadRequest();
var existingPizza = PizzaService.Get(id);
if(existingPizza is null)
return NotFound();
PizzaService.Update(pizza);
return NoContent();
}
Yukarıdaki eylem:
-
[HttpPut]özniteliğiyle belirtildiği gibi yalnızca HTTP PUT fiiline yanıt verir. - parametresinin değerinin
idsonrasındapizza/URL kesimine eklenmesini gerektirir. -
IActionResult'ı döndürür, çünküActionResultdönüş türü çalışma zamanına kadar bilinmez.BadRequest,NotFoundveNoContentyöntemleri sırasıyla ,BadRequestResultveNotFoundResulttürlerini döndürürNoContentResult.
Not
Denetleyici [ApiController] özniteliğiyle açıklandığından, Pizza parametresinin istek gövdesinde bulunacağı örtülü olarak belirtilir.
Bir pizzayı kaldır
Son olarak, bir yöntemi kullanarak DELETE web API'si aracılığıyla bir pizzanın kaldırılmasını etkinleştirelim.
// DELETE action içindeki Controllers/PizzaController.cs açıklamasını aşağıdaki kod ile değiştirin:
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var pizza = PizzaService.Get(id);
if (pizza is null)
return NotFound();
PizzaService.Delete(id);
return NoContent();
}
Yukarıdaki eylem:
- Özniteliği tarafından belirtildiği gibi yalnızca HTTP
DELETEfiiline[HttpDelete]yanıt verir. - parametresinin değerinin
idsonrasındapizza/URL kesimine eklenmesini gerektirir. -
IActionResultdönüş türü çalışma zamanına kadar bilinmediği içinActionResultdöndürür.NotFoundveNoContentyöntemleri sırasıylaNotFoundResultveNoContentResulttürlerini döndürür. - Sağlanan
idparametreyle eşleşen bir pizza için bellek içi önbelleği sorgular.
Devam etmeden önce Controllers/PizzaController.cs dosyasını kaydetmeyi unutmayın,
Tamamlanmış web API'sini derleme ve çalıştırma
Aşağıdaki komutu çalıştırarak web API'sini derleyin ve başlatın:
dotnet run
Tamamlanmış web API'sini HTTP dosyalarıyla test edin
ContosoPizza.http dosyasını yeniden açın.
Aşağıdaki komutu kullanarak
POSTbir istek yapın veHttpReplyeni bir pizza ekleyin.POST {{ContosoPizza_HostAddress}}/pizza/ Content-Type: application/json { "name": "Hawaii", "isGlutenFree": false } ###Yukarıdaki komut yeni oluşturulan pizzayı döndürür:
HTTP/1.1 201 Created Connection: close Content-Type: application/json; charset=utf-8 Date: Wed, 17 Jan 2024 17:03:02 GMT Server: Kestrel Location: http://localhost:5192/Pizza/3 Transfer-Encoding: chunked { "id": 3, "name": "Hawaii", "isGlutenFree": false }Yeni
HawaiipizzayıHawaiianisteği ilePUTpizzaya güncellemek için aşağıdaki komutu kullanın:PUT {{ContosoPizza_HostAddress}}/pizza/3 Content-Type: application/json { "id": 3, "name": "Hawaiian", "isGlutenFree": false } ###Yukarıdaki komut, başarılı olduğunu gösteren aşağıdaki çıkışı döndürür:
HTTP/1.1 204 No Content Connection: close Date: Wed, 17 Jan 2024 17:07:30 GMT Server: KestrelPizzanın güncelleştirildiğini doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET:GET {{ContosoPizza_HostAddress}}/pizza/3 Accept: application/json ###Yukarıdaki komut yeni güncelleştirilen pizzayı döndürür:
HTTP/1.1 200 OK Connection: close Content-Type: application/json; charset=utf-8 Date: Wed, 17 Jan 2024 17:09:01 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaiian", "isGlutenFree": false }Aşağıdaki komutu çalıştırırsanız API'miz yeni oluşturulan pizzayı
DELETEeylem aracılığıyla da silebilir:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###Yukarıdaki komut başarı için bir
204 No Contentsonuç döndürür:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelPizzanın kaldırıldığını doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET:GET {{ContosoPizza_HostAddress}}/pizza/ Accept: application/json ###Yukarıdaki komut, özgün pizzaları sonuç olarak döndürür:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:31:15 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]
artık ASP.NET Core ile oluşturulmuş yeni oluşturulan bir web API'sini uygulamayı ve test etme işlemini tamamladınız.
İsteğe bağlı: Komut Satırı HTTPREPL ile tamamlanmış web API'sini test edin
Mevcut
httpreplterminali yeniden açın veya Visual Studio Code'un ana menüsünden Terminal>Yeni Terminal'i seçerek yeni bir tümleşik terminal açın.Yeni bir terminal açtıysanız aşağıdaki komutu çalıştırarak web API'sine bağlanın:
httprepl https://localhost:{PORT}Alternatif olarak,
HttpReplçalışırken herhangi bir zamanda aşağıdaki komutu çalıştırın:connect https://localhost:{PORT}PizzaAşağıdaki komutu çalıştırarak uç noktaya gidin:cd PizzaPizza API'sinde yeni eylemleri görmek için aşağıdaki komutu çalıştırın:
lsYukarıdaki komut, uç nokta için kullanılabilir API'lerin çıkışını
Pizzagösterir:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]Aşağıdaki komutu kullanarak
POSTbir istek yapın veHttpReplyeni bir pizza ekleyin.post -c "{"name":"Hawaii", "isGlutenFree":false}"Yukarıdaki komut yeni oluşturulan pizzayı döndürür:
HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:23:09 GMT Location: https://localhost:{PORT}/Pizza?id=3 Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaii", "isGlutenFree": false }Yeni
HawaiipizzayıHawaiianisteği ilePUTpizzaya güncellemek için aşağıdaki komutu kullanın:put 3 -c "{"id": 3, "name":"Hawaiian", "isGlutenFree":false}"Yukarıdaki komut, başarılı olduğunu gösteren aşağıdaki çıkışı döndürür:
HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:23:55 GMT Server: KestrelPizzanın güncelleştirildiğini doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET:get 3Yukarıdaki komut yeni güncelleştirilen pizzayı döndürür:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:27:37 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 3, "name": "Hawaiian", "isGlutenFree": false }Aşağıdaki komutu çalıştırırsanız API'miz yeni oluşturulan pizzayı
DELETEeylem aracılığıyla da silebilir:delete 3Yukarıdaki komut başarı için bir
204 No Contentsonuç döndürür:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: KestrelPizzanın kaldırıldığını doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET:getYukarıdaki komut, özgün pizzaları sonuç olarak döndürür:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 23:31:15 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Classic Italian", "isGlutenFree": false }, { "id": 2, "name": "Veggie", "isGlutenFree": true } ]
artık ASP.NET Core ile oluşturulmuş yeni oluşturulan bir web API'sini uygulamayı ve test etme işlemini tamamladınız.