Alıştırma - Denetleyici ekleme

Tamamlandı

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

  1. ControllersVisual Studio Code klasörü seçin ve adlı yeni bir dosya ekleyin PizzaController.cs .

    yeni bir dosyayı denetleyiciler klasörüne eklemek Visual Studio Code görüntüsü.

    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.

  2. 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ığından PizzaController , istekleri http://localhost:5000/pizza Bu 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-Type application/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 gerektirir pizza/ . /pizza deseninin 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

  1. Aşağıdaki komutu çalıştırarak Web API 'sini derleyin ve başlatın:

    dotnet run
    
  2. httpreplana menüden terminal > yeni terminal ' i seçerek mevcut terminali açın veya Visual Studio Code yeni tümleşik terminal ' i açın.

  3. 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
  1. 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]
  1. 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]
  1. 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
      }
  ]
  1. Tek bir pizza sorgulamak için, başka bir istek yapabiliriz GET , ancak id aşağıdaki komutu kullanarak bir parametreyi iletirsiniz:

    get 1
    

    Bu, Classic Italian aş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
    }
    
  2. 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 5
    

    Bu 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"
    }
    
  3. dotnetVisual Studio Code ' deki açılan listede yer alan terminale geri dönün ve klavyenizde web apı 'si ' ni kapatın CTRL+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.