Alıştırma - CRUD işlemleri uygulama
Envanterimizden pizza oluşturma (), güncelleştirme (POST
PUT
) ve silme (DELETE
) özelliği eklemek için web API denetleyicimizi genişletmeye devam edelim.
Pizza ekleme
Şimdi bir yöntemi kullanarak POST
web API'si aracılığıyla pizza eklenmesini etkinleştirelim.
Controllers/PizzaController.cs içindeki // POST action
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
POST
fiiline[HttpPost]
yanıt verir. - İstek gövdesinin
Pizza
nesnesini 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.
Controllers/PizzaController.cs içindeki // PUT action
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
id
sonrasındapizza/
URL kesimine eklenmesini gerektirir. - dönüş
IActionResult
türü çalışma zamanınaActionResult
kadar bilinmediğinden döndürür.BadRequest
,NotFound
veNoContent
yöntemleri sırasıyla ,NotFoundResult
veNoContentResult
türlerini döndürürBadRequestResult
.
Not
Denetleyici [ApiController]
özniteliğiyle açıklandığından, Pizza
parametresinin istek gövdesinde bulunacağı örtülü olarak belirtilir.
Pizza kaldırma
Son olarak, bir yöntemi kullanarak DELETE
web API'si aracılığıyla bir pizzanın kaldırılmasını etkinleştirelim.
Controllers/PizzaController.cs içindeki // DELETE action
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
DELETE
fiiline[HttpDelete]
yanıt verir. - parametresinin değerinin
id
sonrasındapizza/
URL kesimine eklenmesini gerektirir. ActionResult
dönüş türü çalışma zamanına kadar bilinmediği içinIActionResult
döndürür.NotFound
veNoContent
yöntemleri sırasıylaNotFoundResult
veNoContentResult
türlerini döndürür.- Sağlanan
id
parametreyle 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.
POST
Aşağıdaki komutu kullanarak içine yeni pizza ekleme isteğindeHttpRepl
bulunın: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 }
Aşağıdaki komutu kullanarak bir istekle yeni
Hawaii
pizzayıHawaiian
pizzayaPUT
güncelleştirin: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: Kestrel
Pizzanı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ı
DELETE
eylem aracılığıyla da silebilir:DELETE {{ContosoPizza_HostAddress}}/pizza/3 ###
Yukarıdaki komut başarı için bir
204 No Content
sonuç döndürür:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Pizzanı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
httprepl
terminali yeniden açın veya ana menüden Terminal>Yeni Terminal'i seçerek Visual Studio Code'dan 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, çalışırken istediğiniz zaman
HttpRepl
aşağıdaki komutu çalıştırın:connect https://localhost:{PORT}
Pizza
Aşağıdaki komutu çalıştırarak uç noktaya gidin:cd Pizza
Pizza API'sinde yeni eylemleri görmek için aşağıdaki komutu çalıştırın:
ls
Yukarıdaki komut, uç nokta için kullanılabilir API'lerin çıkışını
Pizza
gösterir:https://localhost:{PORT}/Pizza> ls . [GET|POST] .. [] {id} [GET|PUT|DELETE]
POST
Aşağıdaki komutu kullanarak içine yeni pizza ekleme isteğindeHttpRepl
bulunın: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 }
Aşağıdaki komutu kullanarak bir istekle yeni
Hawaii
pizzayıHawaiian
pizzayaPUT
güncelleştirin: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: Kestrel
Pizzanın güncelleştirildiğini doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET
:get 3
Yukarı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ı
DELETE
eylem aracılığıyla da silebilir:delete 3
Yukarıdaki komut başarı için bir
204 No Content
sonuç döndürür:HTTP/1.1 204 No Content Date: Fri, 02 Apr 2021 23:30:04 GMT Server: Kestrel
Pizzanın kaldırıldığını doğrulamak için aşağıdaki komutu kullanarak eylemi yeniden çalıştırın
GET
:get
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.