Alıştırma - Denetleyici ekleme
Denetleyici , eylem olarak bilinen bir veya daha fazla ortak yöntemi olan ortak bir sınıftır. Kurala göre, bir denetleyici proje kökünün denetleyiciler dizinine yerleştirilir. Eylemler, Web API denetleyicisinin içinde HTTP uç noktaları olarak gösterilir.
Denetleyici oluşturma
ControllersVisual Studio Code klasörü seçin ve adlı yeni bir dosya ekleyinPizzaController.cs.
Controllers dizininde, pizzacontroller. cs adlı boş bir sınıf dosyası oluşturulur. Dizinin adının Controllers olması bir kuraldır. Dizin adı web API'si tarafından kullanılan Model-View-Controller mimarisinden gelir.
Not
Kural gereği, denetleyici sınıfı adlarının sonuna Controller eklenir.
Aşağıdaki kodu Controllers/PizzaController. cs öğesine ekleyin. Yaptığınız değişiklikleri kaydedin.
using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; using ContosoPizza.Models; using ContosoPizza.Services; namespace ContosoPizza.Controllers { [ApiController] [Route("[controller]")] public class PizzaController : ControllerBase { public PizzaController() { } // GET all action // GET by Id action // POST action // PUT action // DELETE action } }Daha önce öğrendiğiniz gibi, bu sınıf ControllerBase'den TÜRETILIR, http istekleriyle çalışmaya yönelik temel sınıf ASP.NET Core. Ayrıca, ve hakkında öğrendiğiniz iki standart özniteliği içerir
[ApiController][Route]. Daha önce olduğu gibi,[Route]öznitelik belirtece bir eşlemeyi tanımlar[controller]. Bu denetleyici sınıfı adlandırıldığındanPizzaController, isteklerihttp://localhost:5000/pizzaBu denetleyici tarafından işlenir.
Tüm Pizzas 'yi al
Uygulamamız gereken ilk REST fiili, GET bir istemcinin, API 'den tüm Pizzas 'yi alabildiği yerdir. [HttpGet]Hizmetimizdeki Pizzas 'yi döndürecek bir yöntemi tanımlamak için yerleşik özniteliği kullanabiliriz.
// GET all action Controllers/PizzaController. cs içindeki yorumu şu kodla değiştirin:
[HttpGet]
public ActionResult<List<Pizza>> GetAll() =>
PizzaService.GetAll();
Yukarıdaki eylem:
[HttpGet]özniteliğiyle belirtildiği gibi yalnızca HTTP GET fiiline yanıt verir.- Hizmeti tüm Pizza için sorgular ve ' a sahip olan verileri otomatik olarak döndürür
Content-Typeapplication/json.
Tek bir pizza alma
İstemci Ayrıca tüm liste yerine belirli bir pizza hakkında bilgi almak istiyor olabilir. Gerektiren başka bir eylem uygulayabiliriz GET id . [HttpGet("{id}")]Hizmetimizdeki Pizzas 'yi döndürecek bir yöntemi tanımlamak için yerleşik özniteliği kullanabiliriz. Yönlendirme mantığı, [HttpGet] id iki farklı yol olarak kaydedilir (bir) ve [HttpGet("{id}")] (ile id ), tek bir öğeyi almak için ayrı bir eylem yazmamızı sağlar.
// GET by Id action Controllers/PizzaController. cs içindeki yorumu şu kodla değiştirin:
[HttpGet("{id}")]
public ActionResult<Pizza> Get(int id)
{
var pizza = PizzaService.Get(id);
if(pizza == null)
return NotFound();
return pizza;
}
Yukarıdaki eylem:
[HttpGet]özniteliğiyle belirtildiği gibi yalnızca HTTP GET fiiline yanıt verir.id, Öğesinden sonra URL segmentine parametre değerinin dahil edilmesini gerektirirpizza/./pizzadeseninin denetleyici düzeyi[Route]özniteliğiyle tanımlandığını unutmayın.- Belirtilen parametreyle eşleşen bir pizza için veritabanını sorgular
id.
Yukarıdaki eylemde kullanılan her ActionResult aşağıdaki tabloda buna karşılık gelen HTTP durum koduyla eşlenir.
| ASP.NET Core eylem sonucu |
HTTP durum kodu | Açıklama |
|---|---|---|
Ok belirtiliyor |
200 | idBellek içi önbellekte belirtilen parametre ile eşleşen bir ürün var.Ürün, accept HTTP isteğinin üst bilgisinde (varsayılan olarak JSON) tanımlanan medya türündeki istek gövdesine eklendi. |
NotFound |
404 | Girilen parametre ile eşleşen bir ürün id bellek içi önbellekte yok. |
Denetleyiciyi derleme ve test etme
Aşağıdaki komutu çalıştırarak Web API 'sini derleyin ve başlatın:
dotnet runhttpreplana menüden terminal > yeni terminal ' i seçerek mevcut terminali açın veya Visual Studio Code yeni tümleşik terminal ' i açın.aşağıdaki komutu çalıştırarak web apı 'imize Bağlan:
httprepl http://localhost:5000
Alternatively, run the following command at any time while the HttpRepl is running:
For example:
```dotnetcli
(Disconnected)> connect http://localhost:5000
- Yeni kullanılabilir pizza uç noktanızı görmek için şu komutu çalıştırın:
ls
Yukarıdaki komut, bağlı uç noktada kullanılabilir olan tüm API 'Leri algılar. Aşağıdaki gösterilmesi gerekir:
http://localhost:5000/> ls
. []
Pizza [GET]
WeatherForecast [GET]
- Aşağıdaki komutu çalıştırarak pizza uç noktasına gidin:
cd Pizza
Yukarıdaki komut, uç nokta için kullanılabilir API 'Leri çıktı olarak dolacak Pizza :
http://localhost:5000/> cd Pizza
/Pizza [GET]
GETAşağıdaki komutu kullanarak HttpRepl öğesinde bir istek yapın:
get
Aşağıdaki komut bir GET istek oluşturacak ve içindeki tüm Pizza listesini döndürecek json :
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 02 Apr 2021 21:55:53 GMT
Server: Kestrel
Transfer-Encoding: chunked
[
{
"id": 1,
"name": "Classic Italian",
"isGlutenFree": false
},
{
"id": 2,
"name": "Veggie",
"isGlutenFree": true
}
]
Tek bir pizza sorgulamak için, başka bir istek yapabiliriz
GET, ancakidaşağıdaki komutu kullanarak bir parametreyi iletirsiniz:get 1Bu,
Classic Italianaşağıdaki çıktıyı döndürür:HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 02 Apr 2021 21:57:57 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 1, "name": "Classic Italian", "isGlutenFree": false }API 'imiz, öğe mevcut olmayan durumları da işler. Şimdi de API 'yi yeniden arayalım, ancak aşağıdaki komutla geçersiz bir pizza geçirin
id.get 5Bu
404 Not Found, aşağıdaki çıktıda bir hata döndürür:HTTP/1.1 404 Not Found Content-Type: application/problem+json; charset=utf-8 Date: Fri, 02 Apr 2021 22:03:06 GMT Server: Kestrel Transfer-Encoding: chunked { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.4", "title": "Not Found", "status": 404, "traceId": "00-ec263e401ec554b6a2f3e216a1d1fac5-4b40b8023d56762c-00" }dotnetVisual Studio Code ' deki açılan listede yer alan terminale geri dönün ve klavyenizde web apı 'si ' ni kapatınCTRL+C.
Artık fiilleri uygulamayı tamamladık GET ve bir PizzaController sonraki birimde bulunan pizza VERILERIMIZDE CRUD işlemlerini desteklemek için daha fazla eylem ekleyebiliriz.
Yardıma mı ihtiyacınız var? Sorun giderme kılavuzumuza gözatın veya sorun bildirerek belirli bir konuda geri bildiriminizi paylaşın.