Öğretici: ASP.NET Core ile web API'si oluşturma

Rick Anderson ve Rick Larkin

Bu öğreticide, ASP.NET Core ile web API'si ASP.NET Core.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Web API'si projesi oluşturun.
  • Model sınıfı ve veritabanı bağlamı ekleyin.
  • CRUD yöntemleriyle bir denetleyicinin iskelesi.
  • Yönlendirmeyi, URL yollarını ve dönüş değerlerini yapılandırma.
  • Postman ile web API'sini çağırma.

Sonunda, veritabanında depolanan "to-do" öğelerini yönetecek bir web API'niz vardır.

Genel Bakış

Bu öğretici aşağıdaki API'yi oluşturur:

API Açıklama İstek gövdesi Yanıt gövdesi
GET /api/todoitems Tüm iş öğelerini al Hiçbiri Yapacaklar öğeleri dizisi
GET /api/todoitems/{id} Kimliğine göre öğe al Hiçbiri To-do öğesi
POST /api/todoitems Yeni öğe ekleme To-do öğesi To-do öğesi
PUT /api/todoitems/{id} Mevcut öğeyi güncelleştirme   To-do öğesi Hiçbiri
DELETE /api/todoitems/{id}     Öğe silme     Hiçbiri Hiçbiri

Aşağıdaki diyagramda uygulamanın tasarımı gösterildi.

İstemci, sol tarafta bir kutuyla temsil edildi. Bir istek göndermektedir ve sağdan çizilen bir kutu olan uygulamanın yanıtını alır. Uygulama kutusunda denetleyiciyi, modeli ve veri erişim katmanını temsil eden üç kutu vardır. İstek uygulamanın denetleyicisine gelir ve denetleyici ile veri erişim katmanı arasında okuma/yazma işlemleri gerçekleşir. Model seri hale getirildi ve yanıtta istemciye döndürüldü.

Önkoşullar

Web projesi oluşturma

  • Dosya menüsünden Yeni dosya'Project. >
  • Arama kutusuna Web API'si yazın.
  • Web API ASP.NET Core şablonunu ve ardından Sonraki'yi seçin.
  • Yeni projenizi yapılandır iletişim kutusunda projeyi TodoApi olarak ad girin ve Sonraki'yi seçin.
  • Ek bilgiler iletişim kutusunda Framework'in .NET 6.0 (Önizleme) olduğunu onaylayın ve Oluştur'a tıklayın.

Projeyi test etme

Proje şablonu WeatherForecast Swaggerdesteğine sahip bir API oluşturur.

Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.

Visual Studio bir proje SSL kullanmak için henüz yapılandırılmadığında aşağıdaki iletişim kutusunu görüntüler:

Bu proje SSL kullanmak üzere yapılandırılmış. tarayıcıdaki SSL uyarılarını önlemek için IIS Express oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi tercih edebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

IIS Express SSL sertifikasına güveniyorsanız evet ' i seçin.

Aşağıdaki iletişim kutusu görüntülenir:

Güvenlik Uyarısı iletişim kutusu

Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet ' i seçin.

Firefox tarayıcısına güvenme hakkında bilgi için bkz. Firefox SEC_ERROR_INADEQUATE_KEY_USAGE hatası.

Visual Studio tarayıcıyı başlatıyor ve 'a https://localhost:<port>/swagger/index.html gidiliyor, <port> burada rastgele seçilen bağlantı noktası numarası.

Swagger /swagger/index.html sayfası görüntülenir. GET Try > it out Execute seçeneğini > seçin. Sayfa şunları görüntüler:

  • WeatherForecast API'sini test etmek için Curl komutu.
  • WeatherForecast API'sini test etmek için URL.
  • Yanıt kodu, gövdesi ve üst bilgileri.
  • Medya türlerinin ve örnek değerin ve şemanın yer alan bir açılan liste kutusu.

Swagger sayfası görünmüyorsa bu soruna GitHub bakın.

Swagger, web API'leri için yararlı belgeler ve yardım sayfaları oluşturmak için kullanılır. Bu öğretici bir web API'si oluşturmaya odaklanır. Swagger hakkında daha fazla bilgi için bkz. Swagger/openapı ile web apı 'si belgelerini ASP.NET Core .

İstek URL'sini kopyalayıp tarayıcıya yapıştırın: https://localhost:<port>/WeatherForecast

Aşağıdaki örnekte olduğu gibi JSON döndürülür:

[
    {
        "date": "2019-07-16T19:04:05.7257911-06:00",
        "temperatureC": 52,
        "temperatureF": 125,
        "summary": "Mild"
    },
    {
        "date": "2019-07-17T19:04:05.7258461-06:00",
        "temperatureC": 36,
        "temperatureF": 96,
        "summary": "Warm"
    },
    {
        "date": "2019-07-18T19:04:05.7258467-06:00",
        "temperatureC": 39,
        "temperatureF": 102,
        "summary": "Cool"
    },
    {
        "date": "2019-07-19T19:04:05.7258471-06:00",
        "temperatureC": 10,
        "temperatureF": 49,
        "summary": "Bracing"
    },
    {
        "date": "2019-07-20T19:04:05.7258474-06:00",
        "temperatureC": -1,
        "temperatureF": 31,
        "summary": "Chilly"
    }
]

launchUrl'i güncelleştirme

Properties\launchSettings.json içinde, konumundan launchUrl olarak "swagger" "api/todoitems" güncelleştirin:

"launchUrl": "api/todoitems",

Swagger kaldırılacak olduğundan, önceki işaretleme aşağıdaki bölümlerde eklenen denetleyicinin GET yöntemine başlatılan URL'yi değiştirir.

Model sınıfı ekleme

Model, uygulamanın yönettir olduğu verileri temsil eden bir sınıf kümesidir. Bu uygulamanın modeli tek bir TodoItem sınıftır.

  • Bu Çözüm Gezgini projeye sağ tıklayın. Yeni Klasör > Ekle'yi seçin. Klasöre adını Models girin.

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoItem adını girin ve Ekle'yi seçin.

  • Şablon kodunu aşağıdakiyle değiştirin:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string? Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

özelliği, Id ilişkisel veritabanında benzersiz anahtar olarak işlev gösterir.

Model sınıfları projenin herhangi bir yerine gidebilir, ancak Models klasör kural tarafından kullanılır.

Veritabanı bağlamı ekleme

Veritabanı bağlamı, bir veri modeli için Entity Framework koordine olan ana sınıftır. Bu sınıf, sınıfından türeterek Microsoft.EntityFrameworkCore.DbContext oluşturulur.

NuGet paketlerini ekleme

  • Araçlar menüsünden Çözüm için NuGet Paket Yöneticisi > Paketlerini NuGet'ı seçin.
  • Gözat sekmesini seçin ve arama Microsoft.EntityFrameworkCore.InMemory kutusuna yazın.
  • Sol Microsoft.EntityFrameworkCore.InMemory bölmede öğesini seçin.
  • Sağ bölmede Project onay kutusunu ve ardından Yükle'yi seçin.

TodoContext veritabanı bağlamını ekleme

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoContext adını girin ve Ekle'ye tıklayın.
  • Aşağıdaki kodu girin:

    using Microsoft.EntityFrameworkCore;
    using System.Diagnostics.CodeAnalysis;
    
    namespace TodoApi.Models
    {
        public class TodoContext : DbContext
        {
            public TodoContext(DbContextOptions<TodoContext> options)
                : base(options)
            {
            }
    
            public DbSet<TodoItem> TodoItems { get; set; } = null!;
        }
    }
    

Veritabanı bağlamını kaydetme

Bu ASP.NET Core veritabanı bağlamı gibi hizmetlerin bağımlılık ekleme (DI) kapsayıcısı ile kayıtlı olması gerekir. Kapsayıcı, denetleyicilere hizmeti sağlar.

Program.cs'yi aşağıdaki kodla güncelleştirin:

using Microsoft.EntityFrameworkCore;
using TodoApi.Models;


var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
    opt.UseInMemoryDatabase("TodoList"));
//builder.Services.AddSwaggerGen(c =>
//{
//    c.SwaggerDoc("v1", new() { Title = "TodoApi", Version = "v1" });
//});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    //app.UseSwagger();
    //app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "TodoApi v1"));
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Yukarıdaki kod:

  • Swagger çağrılarını kaldırır.
  • Kullanılmayan yönergeleri using kaldırır.
  • Di kapsayıcısı için veritabanı bağlamını ekler.
  • Veritabanı bağlamının bellek içinde bir veritabanı kullanmayacaklarını belirtir.

Bir denetleyicinin iskelesi

  • Denetleyiciler klasörüne sağ tıklayın.

  • Yeni > İskeleLi Öğe Ekle'yi seçin.

  • api Controller with actions (eylemlerle API Denetleyicisi) seçeneğini Entity Framework ve ardından Ekle'yi seçin.

  • Eylemlerle API Denetleyicisi Ekle'de, Entity Framework kullanın:

    • Model sınıfında TodoItem (TodoApi. Models ) öğesini seçin.
    • Veri bağlam sınıfında TodoContext (TodoApi. Models ) öğesini seçin.
    • Add (Ekle) seçeneğini belirleyin.

    Yapı iskelesi işlemi başarısız olursa ekle'yi seçerek iskeleyi yeniden deneyin.

Oluşturulan kod:

  • sınıfını özniteliğiyle [ApiController] işaretler. Bu öznitelik, denetleyicinin web API'si isteklerine yanıt verir. Özniteliğin olanaklı olduğu belirli davranışlar hakkında bilgi için ASP.NET Core ile web API’leri oluşturma bkz. .
  • Veritabanı bağlamını ( ) denetleyiciye ekleme için DI TodoContext kullanır. Veritabanı bağlamı, denetleyicide CRUD yöntemlerinin her biri için kullanılır.

Aşağıdaki ASP.NET Core şablonlarını içerir:

  • Görünümlere sahip denetleyiciler [action] yol şablonuna dahildir.
  • API denetleyicileri yol [action] şablonuna dahil değil.

Belirteç [action] yol şablonunda değilse eylem adı yol dışında bırakılacaktır. Başka bir ifadeyle, eylemin ilişkili yöntem adı eşleşen yolda kullanılmaz.

PostTodoItem oluşturma yöntemini güncelleştirme

içinde return deyimini PostTodoItem nameof işlecini kullanmak için güncelleştirin:

[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
    _context.TodoItems.Add(todoItem);
    await _context.SaveChangesAsync();

    //return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
    return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}

Yukarıdaki kod, özniteliğiyle belirtilen bir HTTP POST [HttpPost] yöntemidir. yöntemi, HTTP isteğinin gövdesinde yapılacaklar öğesinin değerini alır.

Daha fazla bilgi için bkz. Http[Fiil] öznitelikleriyle öznitelik yönlendirme.

CreatedAtActionyöntemi:

  • Başarılı olursa bir HTTP 201 durum kodu döndürür. HTTP 201, sunucuda yeni bir kaynak oluşturan HTTP POST yönteminin standart yanıtıdır.
  • Yanıta bir Konum üst bilgisi ekler. üst Location bilgisi, yeni oluşturulan to-do öğesinin URI'lerini belirtir. Daha fazla bilgi için bkz. 10.2.2 201 Oluşturuldu.
  • Üst bilgi GetTodoItem Location URI'si oluşturmak için eyleme başvurur. C# nameof anahtar sözcüğü, çağrıda eylem adının sabit kodlamasını önlemek için CreatedAtAction kullanılır.

http-repl yükleme

Bu öğreticide web API'sini test etmek için http-repl kullanılır.

  • Komut isteminde aşağıdaki komutu çalıştırın:

    dotnet tool install -g Microsoft.dotnet-httprepl
    
  • .NET 5.0 SDK'sı veya çalışma zamanı yüklü değilse , .NET 5.0 çalışma zamanı yükleyin.

Test PostTodoItem

  • Uygulamayı çalıştırmak için Ctrl+F5 tuşlarına basın.

  • Yeni bir terminal penceresi açın ve aşağıdaki komutları çalıştırın. Uygulamanız farklı bir bağlantı noktası numarası kullanıyorsa httprepl komutunda 5001 yerine bağlantı noktası numaranızı yazın.

    httprepl https://localhost:5001/api/todoitems
    post -h Content-Type=application/json -c "{"name":"walk dog","isComplete":true}"
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    Date: Tue, 07 Sep 2021 20:39:47 GMT
    Location: https://localhost:5001/api/TodoItems/1
    Server: Kestrel
    Transfer-Encoding: chunked
    
    {
      "id": 1,
      "name": "walk dog",
      "isComplete": true
    }
    

Konum üst bilgisi URI'lerini test etmek

Konum üst bilgilerini test etmek için kopyalayın ve bir httprepl komutuna get yapıştırın.

Aşağıdaki örnek, hala bir httprepl oturumunda olduğunu varsayıyor. Önceki httprepl oturumunu sonladıysanız, aşağıdaki connect httprepl komutlarda yerine yazın:

connect https://localhost:5001/api/todoitems/1
get

Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 07 Sep 2021 20:48:10 GMT
Server: Kestrel
Transfer-Encoding: chunked

{
  "id": 1,
  "name": "walk dog",
  "isComplete": true
}

GET yöntemlerini inceleme

İki GET uç noktası uygulanır:

  • GET /api/todoitems
  • GET /api/todoitems/{id}

Yalnızca yola bir örnek gördünüz /api/todoitems/{id} . Rotayı test etme /api/todoitems :

connect https://localhost:5001/api/todoitems
get

Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 07 Sep 2021 20:59:21 GMT
Server: Kestrel
Transfer-Encoding: chunked

[
  {
    "id": 1,
    "name": "walk dog",
    "isComplete": true
  }
]

Bu kez, döndürülen JSON bir öğe dizisidir.

Bu uygulama, bellek içi bir veritabanını kullanır. Uygulama durdurulup başlatılırsa, önceki GET isteği herhangi bir veri döndürmez. Hiçbir veri döndürülmezse, verileri uygulamaya gönderin .

Yönlendirme ve URL yolları

[HttpGet]Öznitelik, BIR HTTP GET isteğine yanıt veren bir yöntemi gösterir. Her yöntemin URL yolu şu şekilde oluşturulur:

  • Denetleyicinin özniteliğinde şablon dizesiyle başlayın Route :

    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemsController : ControllerBase
    
  • [controller]Denetleyicinin adıyla değiştirin; bu kural, denetleyici sınıf adı "denetleyici" sonekidir. Bu örnek için denetleyici sınıfı adı todoıtems denetleyicisidir, bu nedenle denetleyicinin adı "todoıtems" olur. ASP.NET Core yönlendirme büyük/küçük harfe duyarlıdır.

  • [HttpGet]Özniteliğin bir yol şablonu varsa (örneğin, [HttpGet("products")] ), yola ekleyin. Bu örnek, bir şablon kullanmaz. Daha fazla bilgi için bkz. http [fiil] öznitelikleriyle öznitelik yönlendirme.

Aşağıdaki GetTodoItem yöntemde, yapılacaklar "{id}" öğesinin benzersiz tanımlayıcısı için bir yer tutucu değişkenidir. GetTodoItemÇağrıldığında, "{id}" URL 'deki değeri, yönteminin parametresindeki yöntemine sağlanır id .

[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    return todoItem;
}

Dönüş değerleri

GetTodoItemsVe yöntemlerinin dönüş türü GetTodoItem ActionResult <T> türüdür. ASP.NET Core nesneyi json 'a otomatik olarak serileştirir ve yanıt iletisinin gövdesine json yazar. Bu dönüş türü için yanıt kodu, işlenmemiş özel durum olmadığı varsayılarak 200 Tamamolur. İşlenmemiş özel durumlar 5 xx hataya çevrilir.

ActionResult dönüş türleri, geniş bir HTTP durum kodu aralığını temsil edebilir. Örneğin, GetTodoItem iki farklı durum değeri döndürebilir:

  • İstenen KIMLIKLE eşleşen hiçbir öğe yoksa, yöntem 404 durum NotFound hata kodu döndürür.
  • Aksi takdirde, yöntemi bir JSON yanıt gövdesi ile 200 döndürür. itemSonuçları BIR HTTP 200 yanıtına döndürme.

PutTodoItem yöntemi

PutTodoItem yöntemini inceleyin:

[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
    if (id != todoItem.Id)
    {
        return BadRequest();
    }

    _context.Entry(todoItem).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!TodoItemExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return NoContent();
}

PutTodoItem``PostTodoItem, http put kullanması dışında öğesine benzerdir. Yanıt 204 ' dir (Içerik yok). HTTP belirtimine göre bir PUT isteği, istemcinin yalnızca değişiklikleri değil, tüm güncelleştirilmiş varlığı göndermesini gerektirir. Kısmi güncelleştirmeleri desteklemek için http Patchkullanın.

Aşağıdaki bölümde çağrılırken bir hata alırsanız PutTodoItem , GET veritabanında bir öğe olduğundan emin olmak için çağırın.

PutTodoItem yöntemini test etme

Bu örnek, uygulama her başlatıldığında başlatılmış olması gereken bellek içi bir veritabanını kullanır. Bir PUT çağrısı yapmadan önce veritabanında bir öğe olmalıdır. PUT çağrısı yapmadan önce veritabanında bir öğe olduğundan emin olmak için GET çağrısı yapın.

Kimlik = 1 olan Yapılacaklar öğesini güncelleştirin ve adını şu şekilde ayarlayın "feed fish" :

connect https://localhost:5001/api/todoitems/1
put -h Content-Type=application/json -c "{"id":1,"name":"feed fish","isComplete":true}"

Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

HTTP/1.1 204 No Content
Date: Tue, 07 Sep 2021 21:20:47 GMT
Server: Kestrel

DeleteTodoItem yöntemi

DeleteTodoItem yöntemini inceleyin:

[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);
    if (todoItem == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todoItem);
    await _context.SaveChangesAsync();

    return NoContent();
}

DeleteTodoItem yöntemini test etme

Kimliği = 1 olan Yapılacaklar öğesini silin:

connect https://localhost:5001/api/todoitems/1
delete

Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

HTTP/1.1 204 No Content
Date: Tue, 07 Sep 2021 21:43:00 GMT
Server: Kestrel

Fazla nakletmeyi engelle

Şu anda örnek uygulama tüm nesneyi kullanıma sunar TodoItem . Üretim uygulamaları tipik olarak, bir modelin alt kümesini kullanarak girdi ve döndürülen verileri sınırlandırır. Bunun arkasında birden çok neden vardır ve güvenlik önemli bir değer. Bir modelin alt kümesi genellikle Veri Aktarımı nesnesi (DTO), giriş modeli veya görünüm modeli olarak adlandırılır. DTO Bu öğreticide kullanılır.

Bir DTO için kullanılabilir:

  • Fazla nakletmeyi önleyin.
  • İstemcilerin görüntülemesi beklenen özellikleri gizleyin.
  • Yük boyutunu azaltmak için bazı özellikleri atlayın.
  • İç içe geçmiş nesneler içeren nesne grafiklerini düzleştirin. Düzleştirilmiş nesne grafikleri istemciler için daha uygun olabilir.

DTO yaklaşımını göstermek için, TodoItem sınıfı gizli bir alan içerecek şekilde güncelleştirin:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string? Name { get; set; }
        public bool IsComplete { get; set; }
        public string? Secret { get; set; }
    }
}

Gizli alanın bu uygulamadan gizlenmesi gerekir, ancak bir yönetim uygulaması onu kullanıma sunmayı seçebilir.

Gizli dizi alanını nakledebildiğinizi ve alabilirim.

Bir DTO modeli oluşturun:

namespace TodoApi.Models
{
    public class TodoItemDTO
    {
        public long Id { get; set; }
        public string? Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

TodoItemsControllerKullanmak için öğesini güncelleştirin TodoItemDTO :

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;

namespace TodoApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemsController : ControllerBase
    {
        private readonly TodoContext _context;

        public TodoItemsController(TodoContext context)
        {
            _context = context;
        }

        // GET: api/TodoItems
        [HttpGet]
        public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
        {
            return await _context.TodoItems
                .Select(x => ItemToDTO(x))
                .ToListAsync();
        }

        // GET: api/TodoItems/5
        [HttpGet("{id}")]
        public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
        {
            var todoItem = await _context.TodoItems.FindAsync(id);

            if (todoItem == null)
            {
                return NotFound();
            }

            return ItemToDTO(todoItem);
        }
        // PUT: api/TodoItems/5
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPut("{id}")]
        public async Task<IActionResult> UpdateTodoItem(long id, TodoItemDTO todoItemDTO)
        {
            if (id != todoItemDTO.Id)
            {
                return BadRequest();
            }

            var todoItem = await _context.TodoItems.FindAsync(id);
            if (todoItem == null)
            {
                return NotFound();
            }

            todoItem.Name = todoItemDTO.Name;
            todoItem.IsComplete = todoItemDTO.IsComplete;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
            {
                return NotFound();
            }

            return NoContent();
        }
        // POST: api/TodoItems
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPost]
        public async Task<ActionResult<TodoItemDTO>> CreateTodoItem(TodoItemDTO todoItemDTO)
        {
            var todoItem = new TodoItem
            {
                IsComplete = todoItemDTO.IsComplete,
                Name = todoItemDTO.Name
            };

            _context.TodoItems.Add(todoItem);
            await _context.SaveChangesAsync();

            return CreatedAtAction(
                nameof(GetTodoItem),
                new { id = todoItem.Id },
                ItemToDTO(todoItem));
        }

        // DELETE: api/TodoItems/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteTodoItem(long id)
        {
            var todoItem = await _context.TodoItems.FindAsync(id);

            if (todoItem == null)
            {
                return NotFound();
            }

            _context.TodoItems.Remove(todoItem);
            await _context.SaveChangesAsync();

            return NoContent();
        }

        private bool TodoItemExists(long id)
        {
            return _context.TodoItems.Any(e => e.Id == id);
        }

        private static TodoItemDTO ItemToDTO(TodoItem todoItem) =>
            new TodoItemDTO
            {
                Id = todoItem.Id,
                Name = todoItem.Name,
                IsComplete = todoItem.IsComplete
            };
    }
}

Gizli dizi alanını nakledemeyeceğinizi veya alamazsınız.

JavaScript ile Web API 'sini çağırma

bkz. öğretici: JavaScript ile ASP.NET Core web apı 'si çağırma.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Bir Web API projesi oluşturun.
  • Bir model sınıfı ve bir veritabanı bağlamı ekleyin.
  • CRUD yöntemleriyle bir denetleyiciyi dolandırın.
  • Yönlendirmeyi, URL yollarını ve dönüş değerlerini yapılandırın.
  • Postman ile Web API 'sini çağırın.

Sonunda, bir veritabanında depolanan "yapılacaklar" öğelerini yönetebilmek için bir Web API 'SI vardır.

Genel Bakış

Bu öğretici aşağıdaki API 'YI oluşturur:

API Açıklama İstek gövdesi Yanıt gövdesi
GET /api/todoitems Tüm yapılacaklar öğelerini Al Hiçbiri Yapılacaklar öğeleri dizisi
GET /api/todoitems/{id} KIMLIĞE göre öğe al Hiçbiri Yapılacaklar öğesi
POST /api/todoitems Yeni öğe Ekle Yapılacaklar öğesi Yapılacaklar öğesi
PUT /api/todoitems/{id} Mevcut bir öğeyi güncelleştir   Yapılacaklar öğesi Hiçbiri
DELETE /api/todoitems/{id}     Öğe   silme   Hiçbiri Hiçbiri

Aşağıdaki diyagramda uygulamanın tasarımı gösterilmektedir.

İstemci, sol taraftaki bir kutu ile temsil edilir. Bir istek gönderir ve sağ tarafta çizilmiş bir kutu olan uygulamadan bir yanıt alır. Uygulama kutusu içinde, üç kutu denetleyiciyi, modeli ve veri erişim katmanını temsil eder. İstek uygulamanın denetleyicisine gelir ve denetleyici ile veri erişim katmanı arasında okuma/yazma işlemleri gerçekleştirilir. Model seri hale getirildi ve yanıtta istemciye döndürüldü.

Önkoşullar

Web projesi oluşturma

  • Dosya menüsünden Yeni dosya'Project. >
  • Web API ASP.NET Core seçin ve Ardından'ya tıklayın.
  • Projeye TodoApi adını girin ve Oluştur'a tıklayın.
  • Web Uygulaması için yeni ASP.NET Core iletişim kutusunda .NET Core ve ASP.NET Core 5.0'ın seçili olduğunu onaylayın. API şablonunu seçin ve Oluştur'a tıklayın.

VS yeni proje iletişim kutusu

Projeyi test etme

Proje şablonu WeatherForecast Swaggerdesteğine sahip bir API oluşturur.

Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.

Visual Studio bir proje SSL kullanmak için henüz yapılandırılmadığında aşağıdaki iletişim kutusunu görüntüler:

Bu proje SSL kullanmak üzere yapılandırılmış. tarayıcıdaki SSL uyarılarını önlemek için IIS Express oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi tercih edebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

IIS Express SSL sertifikasına güveniyorsanız evet ' i seçin.

Aşağıdaki iletişim kutusu görüntülenir:

Güvenlik Uyarısı iletişim kutusu

Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet ' i seçin.

Firefox tarayıcısına güvenme hakkında bilgi için bkz. Firefox SEC_ERROR_INADEQUATE_KEY_USAGE hatası.

Visual Studio başlatmaları:

  • Web IIS Express sunucusu.
  • Varsayılan tarayıcıda ve yerine https://localhost:<port>/swagger/index.html gidiliyor. <port> Burada, rastgele seçilen bağlantı noktası numarasıdır.

Swagger /swagger/index.html sayfası görüntülenir. GET Try > it out Execute seçeneğini > seçin. Sayfa şunları görüntüler:

  • WeatherForecast API'sini test etmek için Curl komutu.
  • WeatherForecast API'sini test etmek için URL.
  • Yanıt kodu, gövdesi ve üst bilgileri.
  • Medya türlerinin ve örnek değerin ve şemanın yer alan bir açılan liste kutusu.

Swagger sayfası görünmüyorsa bu soruna GitHub bakın.

Swagger, web API'leri için yararlı belgeler ve yardım sayfaları oluşturmak için kullanılır. Bu öğretici bir web API'si oluşturmaya odaklanır. Swagger hakkında daha fazla bilgi için bkz. Swagger/openapı ile web apı 'si belgelerini ASP.NET Core .

İstek URL'sini kopyalayıp tarayıcıya yapıştırın: https://localhost:<port>/WeatherForecast

Aşağıdakine benzer JSON döndürülür:

[
    {
        "date": "2019-07-16T19:04:05.7257911-06:00",
        "temperatureC": 52,
        "temperatureF": 125,
        "summary": "Mild"
    },
    {
        "date": "2019-07-17T19:04:05.7258461-06:00",
        "temperatureC": 36,
        "temperatureF": 96,
        "summary": "Warm"
    },
    {
        "date": "2019-07-18T19:04:05.7258467-06:00",
        "temperatureC": 39,
        "temperatureF": 102,
        "summary": "Cool"
    },
    {
        "date": "2019-07-19T19:04:05.7258471-06:00",
        "temperatureC": 10,
        "temperatureF": 49,
        "summary": "Bracing"
    },
    {
        "date": "2019-07-20T19:04:05.7258474-06:00",
        "temperatureC": -1,
        "temperatureF": 31,
        "summary": "Chilly"
    }
]

launchUrl'i güncelleştirme

Properties\launchSettings.json içinde, konumundan launchUrl olarak "swagger" "api/todoitems" güncelleştirin:

"launchUrl": "api/todoitems",

Swagger kaldırılacak olduğundan, önceki işaretleme aşağıdaki bölümlerde eklenen denetleyicinin GET yöntemine başlatılan URL'yi değiştirir.

Model sınıfı ekleme

Model, uygulamanın yönettir olduğu verileri temsil eden bir sınıf kümesidir. Bu uygulamanın modeli tek bir TodoItem sınıftır.

  • Bu Çözüm Gezgini, projeye sağ tıklayın. Yeni Klasör > Ekle'yi seçin. Klasöre adını Models girin.

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoItem adını girin ve Ekle'yi seçin.

  • Şablon kodunu aşağıdakiyle değiştirin:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

özelliği, Id ilişkisel veritabanında benzersiz anahtar olarak işlev gösterir.

Model sınıfları projenin herhangi bir yerine gidebilir, ancak Models klasör kural tarafından kullanılır.

Veritabanı bağlamı ekleme

Veritabanı bağlamı, bir veri modeli için Entity Framework koordine olan ana sınıftır. Bu sınıf, sınıfından türeterek Microsoft.EntityFrameworkCore.DbContext oluşturulur.

NuGet paketlerini ekleme

  • Araçlar menüsünden Çözüm için NuGet Paket Yöneticisi >'NuGet Yönet'i seçin.
  • Gözat sekmesini seçin ve arama Microsoft.EntityFrameworkCore.InMemory kutusuna yazın.
  • Sol Microsoft.EntityFrameworkCore.InMemory bölmede öğesini seçin.
  • Sağ bölmede Project onay kutusunu ve ardından Yükle'yi seçin.

NuGet Paket Yöneticisi

TodoContext veritabanı bağlamını ekleme

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoContext adını girin ve Ekle'ye tıklayın.
  • Aşağıdaki kodu girin:

    using Microsoft.EntityFrameworkCore;
    
    namespace TodoApi.Models
    {
        public class TodoContext : DbContext
        {
            public TodoContext(DbContextOptions<TodoContext> options)
                : base(options)
            {
            }
    
            public DbSet<TodoItem> TodoItems { get; set; }
        }
    }
    

Veritabanı bağlamını kaydetme

ASP.NET Core, veritabanı bağlamı gibi hizmetlerin bağımlılık ekleme (dı) kapsayıcısına kayıtlı olması gerekir. Kapsayıcı hizmeti denetleyicilere sağlar.

Başlangıç. cs öğesini aşağıdaki kodla güncelleştirin:

// Unused usings removed
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;

namespace TodoApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddDbContext<TodoContext>(opt =>
                                               opt.UseInMemoryDatabase("TodoList"));
            //services.AddSwaggerGen(c =>
            //{
            //    c.SwaggerDoc("v1", new OpenApiInfo { Title = "TodoApi", Version = "v1" });
            //});
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                //app.UseSwagger();
                //app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "TodoApi v1"));
            }

            app.UseHttpsRedirection();
            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

Yukarıdaki kod:

  • Swagger çağrılarını kaldırır.
  • Kullanılmayan using bildirimleri kaldırır.
  • Veritabanı bağlamını dı kapsayıcısına ekler.
  • Veritabanı bağlamının bellek içi bir veritabanını kullanacağı belirtir.

Denetleyiciyi bir denetleyiciye katlama

  • Denetleyiciler klasörüne sağ tıklayın.

  • Yeni yapı iskelesi öğesi Ekle öğesini seçin.

  • Entity Framework kullanarak ve eylemler Içeren API denetleyicisi' ni seçin ve ardından Ekle' yi seçin.

  • API denetleyiciyi eylemler Ile Ekle ' de Entity Framework iletişim kutusunu kullanarak:

    • Model sınıfında TodoItem (TodoApi. Models ) öğesini seçin.
    • Veri bağlamı sınıfında TodoContext (TodoApi. Models ) öğesini seçin.
    • Add (Ekle) seçeneğini belirleyin.

Oluşturulan kod:

  • Sınıfını [ApiController] özniteliğiyle işaretler. Bu öznitelik, denetleyicinin Web API isteklerine yanıt verdiğini belirtir. Özniteliğin izin aldığı belirli davranışlar hakkında daha fazla bilgi için bkz ASP.NET Core ile web API’leri oluşturma ..
  • Veritabanı bağlamını () denetleyiciye eklemek için DI kullanır TodoContext . Veritabanı bağlamı, denetleyicideki CRUD yöntemlerinde her birinde kullanılır.

için ASP.NET Core şablonları:

  • Görünümleri olan denetleyiciler [action] yol şablonuna dahildir.
  • API denetleyicileri [action] yol şablonuna dahil değildir.

[action]Belirteç yol şablonunda olmadığında, eylem adı rotadan çıkarılır. Diğer bir deyişle, eylemin ilişkili Yöntem adı eşleşen rotada kullanılmaz.

PostTodoItem Create metodunu güncelleştirme

İçindeki return ifadesini, PostTodoItem NameOf işlecini kullanacak şekilde güncelleştirin:

// POST: api/TodoItems
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
    _context.TodoItems.Add(todoItem);
    await _context.SaveChangesAsync();

    //return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
    return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}

Yukarıdaki kod, özniteliğiyle gösterildiği gibi bir HTTP POST yöntemidir [HttpPost] . Yöntemi, HTTP isteğinin gövdesinden Yapılacaklar öğesinin değerini alır.

Daha fazla bilgi için bkz. http [fiil] öznitelikleriyle öznitelik yönlendirme.

CreatedAtActionYöntemi:

  • Başarılı olursa bir HTTP 201 durum kodu döndürür. HTTP 201, sunucuda yeni bir kaynak oluşturan HTTP POST yöntemi için standart yanıttır.
  • Yanıta bir konum üst bilgisi ekler. LocationÜst bilgi, yeni oluşturulan Yapılacaklar öğesinin URI 'sini belirtir. Daha fazla bilgi için bkz. 10.2.2 201 oluşturma.
  • GetTodoItemÜSTBILGININ URI 'sini oluşturma eylemine başvurur Location . C# nameof anahtar sözcüğü, çağrıda eylem adının sabit kodlanmasını önlemek için kullanılır CreatedAtAction .

Postman yükleme

Bu öğretici, Web API 'sini test etmek için Postman kullanır.

  • Postman yükleme
  • Web uygulamasını başlatın.
  • Postman 'ı başlatın.
  • SSL sertifikası doğrulamasını devre dışı bırak
    • dosya > Ayarlar (genel sekmesinden), SSL sertifikası doğrulamasını devre dışı bırakın.

      Uyarı

      Denetleyiciyi test ettikten sonra SSL sertifikası doğrulamasını yeniden etkinleştirin.

Postman ile test PostTodoItem

  • Yeni bir istek oluşturun.

  • HTTP yöntemini olarak ayarlayın POST .

  • URI değerini olarak ayarlayın https://localhost:<port>/api/todoitems . Örneğin, https://localhost:5001/api/todoitems.

  • Gövde sekmesini seçin.

  • Ham radyo düğmesini seçin.

  • Türü JSON (Application/JSON) olarak ayarlayın.

  • İstek gövdesinde, bir yapılacaklar öğesi için JSON girin:

    {
      "name":"walk dog",
      "isComplete":true
    }
    
  • Gönder’i seçin.

    Oluşturma isteğiyle Postman

Konum üst bilgisi URI 'sini test etme

Konum üst bilgisi URI 'SI tarayıcıda test edilebilir. Konum üst bilgisi URI 'sini kopyalayıp tarayıcıya yapıştırın.

Postman 'da test etmek için:

  • Yanıt bölmesinde üstbilgiler sekmesini seçin.

  • Konum üst bilgisi değerini kopyalayın:

    Postman konsolunun üstbilgiler sekmesi

  • HTTP yöntemini olarak ayarlayın GET .

  • URI değerini olarak ayarlayın https://localhost:<port>/api/todoitems/1 . Örneğin, https://localhost:5001/api/todoitems/1.

  • Gönder’i seçin.

GET yöntemlerini inceleyin

İki uç nokta al uygulandı:

  • GET /api/todoitems
  • GET /api/todoitems/{id}

Tarayıcıdan veya Postman 'dan iki uç noktayı çağırarak uygulamayı test edin. Örnek:

  • https://localhost:5001/api/todoitems
  • https://localhost:5001/api/todoitems/1

Şuna benzer bir yanıt, şu çağrı tarafından üretilir GetTodoItems :

[
  {
    "id": 1,
    "name": "Item1",
    "isComplete": false
  }
]

Postman ile test al

  • Yeni bir istek oluşturun.
  • Almak için http yöntemini ayarlayın.
  • İstek URI 'sini olarak ayarlayın https://localhost:<port>/api/todoitems . Örneğin, https://localhost:5001/api/todoitems.
  • Postman 'da iki bölme görünümü ayarlayın.
  • Gönder’i seçin.

Bu uygulama, bellek içi bir veritabanını kullanır. Uygulama durdurulup başlatılırsa, önceki GET isteği herhangi bir veri döndürmez. Hiçbir veri döndürülmezse, verileri uygulamaya gönderin .

Yönlendirme ve URL yolları

[HttpGet]Öznitelik, BIR HTTP GET isteğine yanıt veren bir yöntemi gösterir. Her yöntemin URL yolu şu şekilde oluşturulur:

  • Denetleyicinin özniteliğinde şablon dizesiyle başlayın Route :

    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemsController : ControllerBase
    {
        private readonly TodoContext _context;
    
        public TodoItemsController(TodoContext context)
        {
            _context = context;
        }
    
  • [controller]Denetleyicinin adıyla değiştirin; bu kural, denetleyici sınıf adı "denetleyici" sonekidir. Bu örnek için denetleyici sınıfı adı TodoItems Controller' olduğu için denetleyici adı "TodoItems" olur. ASP.NET Core büyük/büyük/büyük harfe duyarlı değildir.

  • Özniteliğin [HttpGet] bir yol şablonu varsa (örneğin, ), bunu yola [HttpGet("products")] ekler. Bu örnek şablon kullanmaz. Daha fazla bilgi için bkz. Http[Fiil] öznitelikleriyle öznitelik yönlendirme.

Aşağıdaki GetTodoItem yöntemde, "{id}" yapılacaklar öğesinin benzersiz tanımlayıcısı için bir yer tutucu değişkenidir. GetTodoItemÇağrıldığında, "{id}" URL'de değeri yöntemine parametresinde id sağlanır.

// GET: api/TodoItems/5
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    return todoItem;
}

Dönüş değerleri

ve yöntemlerinin dönüş GetTodoItems GetTodoItem türü ActionResult t <T> t tür. ASP.NET Core JSON'a otomatik olarak seri hale getirmez ve JSON'u yanıt iletisi gövdesine yazar. bu dönüş türü için yanıt kodu 200 Tamam'dır.İşlenemeyen özel durumlar olmadığını varsayarak. İşlenemeyen özel durumlar 5xx hatalarına çevrilir.

ActionResult dönüş türleri çok çeşitli HTTP durum kodlarını temsil ediyor olabilir. Örneğin, GetTodoItem iki farklı durum değeri dönüşebilirsiniz:

  • İstenen kimlikle eşleşen bir öğe yoksa yöntem 404 durum hata kodunu NotFound döndürür.
  • Aksi takdirde, yöntem bir JSON yanıt gövdesi ile 200 döndürür. Http item 200 yanıtı döndüren sonuçlar.

PutTodoItem yöntemi

PutTodoItem yöntemini inceleyin:

// PUT: api/TodoItems/5
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
    if (id != todoItem.Id)
    {
        return BadRequest();
    }

    _context.Entry(todoItem).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!TodoItemExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return NoContent();
}

PutTodoItem , ile PostTodoItem benzerdir, ancak HTTP PUT kullanır. Yanıt: 204 (İçerik Yok). HTTP belirtimına göre PUT isteği, istemcinin yalnızca değişiklikleri değil güncelleştirilmiş varlığın tamamını göndermesini gerektirir. Kısmi güncelleştirmeleri desteklemek için HTTP PATCH kullanın.

çağrısında bir hata PutTodoItem alırsanız, veritabanında bir öğe olduğundan emin olmak için öğesini GET arayın.

PutTodoItem yöntemini test etmek

Bu örnek, uygulama her başlatıcıda başlatılması gereken bir bellek içinde veritabanı kullanır. PUT çağrısı öncesinde veritabanında bir öğe olmalıdır. PUT çağrısı yapmadan önce veritabanında bir öğe olduğundan emin olmak için GET çağrısı yapma.

Id = 1 olan to-do öğesini güncelleştirin ve adını olarak "feed fish" ayarlayın:

  {
    "Id":1,
    "name":"feed fish",
    "isComplete":true
  }

Aşağıdaki görüntüde Postman güncelleştirmesi yer amektedir:

204 (İçerik Yok) yanıtını gösteren Postman konsolu

DeleteTodoItem yöntemi

DeleteTodoItem yöntemini inceleyin:

// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);
    if (todoItem == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todoItem);
    await _context.SaveChangesAsync();

    return NoContent();
}

DeleteTodoItem yöntemini test etmek

Postman kullanarak bir to-do öğesini silin:

  • yöntemini olarak DELETE ayarlayın.
  • Silinecek nesnenin URI'lerini ayarlayın https://localhost:5001/api/todoitems/1 (örneğin).
  • Gönder’i seçin.

Fazla gönderiyi engelleme

Şu anda örnek uygulama nesnenin tamamını TodoItem gösterir. Üretim uygulamaları genellikle girişi yapılan ve modelin bir alt kümesi kullanılarak döndürülen verileri sınırlandırr. Bunun birden çok nedeni vardır ve güvenlik önemli bir nedendir. Modelin alt kümesi genellikle Veri Aktarım Nesnesi (DTO), giriş modeli veya görünüm modeli olarak adlandırılır. Bu makalede DTO kullanılmıştır.

DTO aşağıdakiler için kullanılabilir:

  • Fazla gönderiyi önle.
  • İstemcilerin görüntülemesi gereken özellikleri gizle.
  • Yük boyutunu azaltmak için bazı özellikleri atla.
  • İç içe nesneleri içeren nesne grafiklerini düzlük. Düzmüş nesne grafları istemciler için daha kullanışlı olabilir.

DTO yaklaşımını göstermek için sınıfını TodoItem gizli bir alan içerecek şekilde güncelleştirin:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
        public string Secret { get; set; }
    }
}

Gizli alan bu uygulamanın gizli olması gerekir, ancak bir yönetim uygulaması bunu açığa çıkarmayı seçebilir.

Gizli alan yayınlaya ve alacı 2.000.000'e kadar olan tüm bilgileri girin.

DTO modeli oluşturma:

public class TodoItemDTO
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
}

kullanmak TodoItemsController için 'i TodoItemDTO güncelleştirin:

// GET: api/TodoItems
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
{
    return await _context.TodoItems
        .Select(x => ItemToDTO(x))
        .ToListAsync();
}

[HttpGet("{id}")]
public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    return ItemToDTO(todoItem);
}

[HttpPut("{id}")]
public async Task<IActionResult> UpdateTodoItem(long id, TodoItemDTO todoItemDTO)
{
    if (id != todoItemDTO.Id)
    {
        return BadRequest();
    }

    var todoItem = await _context.TodoItems.FindAsync(id);
    if (todoItem == null)
    {
        return NotFound();
    }

    todoItem.Name = todoItemDTO.Name;
    todoItem.IsComplete = todoItemDTO.IsComplete;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
    {
        return NotFound();
    }

    return NoContent();
}

[HttpPost]
public async Task<ActionResult<TodoItemDTO>> CreateTodoItem(TodoItemDTO todoItemDTO)
{
    var todoItem = new TodoItem
    {
        IsComplete = todoItemDTO.IsComplete,
        Name = todoItemDTO.Name
    };

    _context.TodoItems.Add(todoItem);
    await _context.SaveChangesAsync();

    return CreatedAtAction(
        nameof(GetTodoItem),
        new { id = todoItem.Id },
        ItemToDTO(todoItem));
}

[HttpDelete("{id}")]
public async Task<IActionResult> DeleteTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todoItem);
    await _context.SaveChangesAsync();

    return NoContent();
}

private bool TodoItemExists(long id) =>
     _context.TodoItems.Any(e => e.Id == id);

private static TodoItemDTO ItemToDTO(TodoItem todoItem) =>
    new TodoItemDTO
    {
        Id = todoItem.Id,
        Name = todoItem.Name,
        IsComplete = todoItem.IsComplete
    };

Gizli alan gönderileye veya alana alamayayı doğrulayın.

JavaScript ile web API'sini çağırma

Bkz. Öğretici: JavaScript ASP.NET Core web API'si çağırma.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Web API'si projesi oluşturun.
  • Model sınıfı ve veritabanı bağlamı ekleyin.
  • CRUD yöntemleriyle bir denetleyicinin iskelesi.
  • Yönlendirmeyi, URL yollarını ve dönüş değerlerini yapılandırma.
  • Postman ile web API'sini çağırma.

Sonunda, veritabanında depolanan "to-do" öğelerini yönetecek bir web API'niz vardır.

Genel Bakış

Bu öğretici aşağıdaki API'yi oluşturur:

API Açıklama İstek gövdesi Yanıt gövdesi
GET /api/todoitems Tüm iş öğelerini al Hiçbiri Yapacaklar öğeleri dizisi
GET /api/todoitems/{id} Kimliğine göre öğe al Hiçbiri To-do öğesi
POST /api/todoitems Yeni öğe ekleme To-do öğesi To-do öğesi
PUT /api/todoitems/{id} Mevcut öğeyi güncelleştirme   To-do öğesi Hiçbiri
DELETE /api/todoitems/{id}     Öğe silme     Hiçbiri Hiçbiri

Aşağıdaki diyagramda uygulamanın tasarımı gösterildi.

İstemci, sol tarafta bir kutuyla temsil edildi. Bir istek göndermektedir ve sağdan çizilen bir kutu olan uygulamanın yanıtını alır. Uygulama kutusunda denetleyiciyi, modeli ve veri erişim katmanını temsil eden üç kutu vardır. İstek uygulamanın denetleyicisine gelir ve denetleyici ile veri erişim katmanı arasında okuma/yazma işlemleri gerçekleşir. Model seri hale getirildi ve yanıtta istemciye döndürüldü.

Önkoşullar

Web projesi oluşturma

  • Dosya menüsünden Yeni dosya'Project. >
  • Web Uygulaması ASP.NET Core seçin ve Ardından'ya tıklayın.
  • Projeye TodoApi adını girin ve Oluştur'a tıklayın.
  • Web Uygulaması için yeni ASP.NET Core iletişim kutusunda .NET Core ve ASP.NET Core 3.1'in seçili olduğunu onaylayın. API şablonunu seçin ve Oluştur'a tıklayın.

VS yeni proje iletişim kutusu

API’yi test etme

Proje şablonu bir WeatherForecast API oluşturur. Uygulamayı Get test etmek için tarayıcıdan yöntemini çağırma.

Uygulamayı çalıştırmak için Ctrl+F5 tuşlarına basın. Visual Studio tarayıcıyı başlatıyor ve 'a https://localhost:<port>/WeatherForecast gidiliyor. <port> Burada, rastgele seçilen bağlantı noktası numarasıdır.

Sertifika sertifikasına güvenmeli olup IIS Express alıyorsanız Evet'i seçin. Daha sonra görüntülenen Güvenlik Uyarısı iletişim kutusunda Evet'i seçin.

Aşağıdakine benzer JSON döndürülür:

[
    {
        "date": "2019-07-16T19:04:05.7257911-06:00",
        "temperatureC": 52,
        "temperatureF": 125,
        "summary": "Mild"
    },
    {
        "date": "2019-07-17T19:04:05.7258461-06:00",
        "temperatureC": 36,
        "temperatureF": 96,
        "summary": "Warm"
    },
    {
        "date": "2019-07-18T19:04:05.7258467-06:00",
        "temperatureC": 39,
        "temperatureF": 102,
        "summary": "Cool"
    },
    {
        "date": "2019-07-19T19:04:05.7258471-06:00",
        "temperatureC": 10,
        "temperatureF": 49,
        "summary": "Bracing"
    },
    {
        "date": "2019-07-20T19:04:05.7258474-06:00",
        "temperatureC": -1,
        "temperatureF": 31,
        "summary": "Chilly"
    }
]

Model sınıfı ekleme

Model, uygulamanın yönettir olduğu verileri temsil eden bir sınıf kümesidir. Bu uygulamanın modeli tek bir TodoItem sınıftır.

  • Bu Çözüm Gezgini, projeye sağ tıklayın. Yeni Klasör > Ekle'yi seçin. Klasöre adını Models girin.

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoItem adını girin ve Ekle'yi seçin.

  • Şablon kodunu aşağıdaki kodla değiştirin:

public class TodoItem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
}

özelliği, Id ilişkisel veritabanında benzersiz anahtar olarak işlev gösterir.

Model sınıfları projenin herhangi bir yerine gidebilir, ancak Models klasör kural tarafından kullanılır.

Veritabanı bağlamı ekleme

Veritabanı bağlamı, bir veri modeli için Entity Framework koordine olan ana sınıftır. Bu sınıf, sınıfından türeterek Microsoft.EntityFrameworkCore.DbContext oluşturulur.

NuGet paketlerini ekleme

  • Araçlar menüsünden Çözüm için NuGet Paket Yöneticisi > Paketlerini NuGet'ı seçin.
  • Gözat sekmesini seçin ve arama kutusuna Microsoft.EntityFrameworkCore.InMemory girin.
  • Sol bölmede Microsoft.EntityFrameworkCore.InMemory öğesini seçin.
  • Sağ bölmede Project onay kutusunu ve ardından Yükle'yi seçin.

NuGet Paket Yöneticisi

TodoContext veritabanı bağlamını ekleme

  • Klasöre sağ tıklayın Models ve Sınıf Ekle'yi > seçin. Sınıfa TodoContext adını girin ve Ekle'ye tıklayın.
  • Aşağıdaki kodu girin:

    using Microsoft.EntityFrameworkCore;
    
    namespace TodoApi.Models
    {
        public class TodoContext : DbContext
        {
            public TodoContext(DbContextOptions<TodoContext> options)
                : base(options)
            {
            }
    
            public DbSet<TodoItem> TodoItems { get; set; }
        }
    }
    

Veritabanı bağlamını kaydetme

Bu ASP.NET Core veritabanı bağlamı gibi hizmetlerin bağımlılık ekleme (DI) kapsayıcısı ile kayıtlı olması gerekir. Kapsayıcı, denetleyicilere hizmeti sağlar.

Startup.cs'yi aşağıdaki vurgulanmış kodla güncelleştirin:

// Unused usings removed
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;

namespace TodoApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<TodoContext>(opt =>
               opt.UseInMemoryDatabase("TodoList"));
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

Yukarıdaki kod:

  • Kullanılmayan bildirimleri using kaldırır.
  • Di kapsayıcısı için veritabanı bağlamını ekler.
  • Veritabanı bağlamının bellek içinde bir veritabanı kullanmayacaklarını belirtir.

Bir denetleyicinin iskelesi

  • Denetleyiciler klasörüne sağ tıklayın.

  • Yeni > İskeleLi Öğe Ekle'yi seçin.

  • api Controller with actions (eylemlerle API Denetleyicisi) seçeneğini Entity Framework ve ardından Ekle'yi seçin.

  • Eylemlerle API Denetleyicisi Ekle'de, Entity Framework kullanın:

    • Model sınıfında TodoItem (TodoApi. Models ) öğesini seçin.
    • Veri bağlam sınıfında TodoContext (TodoApi. Models ) öğesini seçin.
    • Add (Ekle) seçeneğini belirleyin.

Oluşturulan kod:

  • sınıfını özniteliğiyle [ApiController] işaretler. Bu öznitelik, denetleyicinin web API'si isteklerine yanıt verir. Özniteliğin olanaklı olduğu belirli davranışlar hakkında bilgi için bkz. ASP.NET Core ile web API’leri oluşturma .
  • Veritabanı bağlamını ( ) denetleyiciye ekleme için DI TodoContext kullanır. Veritabanı bağlamı, denetleyicide CRUD yöntemlerinin her biri için kullanılır.

Aşağıdaki ASP.NET Core şablonlarını içerir:

  • Görünümlere sahip denetleyiciler [action] yol şablonuna dahildir.
  • API denetleyicileri yol [action] şablonuna dahil değil.

Belirteç [action] yol şablonunda değilse eylem adı yol dışında bırakılacaktır. Başka bir ifadeyle, eylemin ilişkili yöntem adı eşleşen yolda kullanılmaz.

PostTodoItem create yöntemini inceleme

nameof işleci kullanmak için içinde return PostTodoItem deyimini değiştirin:

// POST: api/TodoItems
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
    _context.TodoItems.Add(todoItem);
    await _context.SaveChangesAsync();

    //return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
    return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}

Yukarıdaki kod, özniteliğiyle belirtilen bir HTTP POST [HttpPost] yöntemidir. yöntemi, HTTP isteğinin gövdesinde yapılacaklar öğesinin değerini alır.

Daha fazla bilgi için bkz. Http[Fiil] öznitelikleriyle öznitelik yönlendirme.

CreatedAtActionyöntemi:

  • Başarılı olursa bir HTTP 201 durum kodu döndürür. HTTP 201, sunucuda yeni bir kaynak oluşturan HTTP POST yönteminin standart yanıtıdır.
  • Yanıta bir Konum üst bilgisi ekler. üst Location bilgisi, yeni oluşturulan to-do öğesinin URI'lerini belirtir. Daha fazla bilgi için bkz. 10.2.2 201 Oluşturuldu.
  • Üst bilgi GetTodoItem Location URI'si oluşturmak için eyleme başvurur. C# nameof anahtar sözcüğü, çağrıda eylem adının sabit kodlamasını önlemek için CreatedAtAction kullanılır.

Postman'i yükleme

Bu öğreticide web API'sini test etmek için Postman kullanılır.

  • Postman'i yükleme
  • Web uygulamasını başlatma.
  • Postman'i başlatma.
  • SSL sertifikası doğrulamayı devre dışı bırakma
    • Dosya Ayarlar ( > Genel sekmesinde), SSL sertifikası doğrulamasını devre dışı bırakma.

      Uyarı

      Denetleyiciyi test ettikten sonra SSL sertifikası doğrulamasını yeniden etkinleştirin.

PostTodoItem'ı Postman ile test etmek

  • Yeni bir istek oluşturun.

  • HTTP yöntemini olarak POST ayarlayın.

  • URI'yi olarak https://localhost:<port>/api/todoitems ayarlayın. Örneğin, https://localhost:5001/api/todoitems.

  • Gövde sekmesini seçin.

  • Ham radyo düğmesini seçin.

  • Türü JSON (application/json) olarak ayarlayın.

  • İstek gövdesine, bir yap-yap öğesi için JSON girin:

    {
      "name":"walk dog",
      "isComplete":true
    }
    
  • Gönder’i seçin.

    Oluşturma isteği ile Postman

Postman ile konum üst bilgisi URI'sinde test

  • Yanıt bölmesinde Üst Bilgiler sekmesini seçin.

  • Konum üst bilgisi değerini kopyalayın:

    Postman konsolunu üst bilgiler sekmesi

  • HTTP yöntemini olarak GET ayarlayın.

  • URI'yi olarak https://localhost:<port>/api/todoitems/1 ayarlayın. Örneğin, https://localhost:5001/api/todoitems/1.

  • Gönder’i seçin.

GET yöntemlerini inceleme

Bu yöntemler iki GET uç noktası kullanır:

  • GET /api/todoitems
  • GET /api/todoitems/{id}

Tarayıcıdan veya Postman'den iki uç noktayı çağırarak uygulamayı test edin. Örnek:

  • https://localhost:5001/api/todoitems
  • https://localhost:5001/api/todoitems/1

çağrısı tarafından aşağıdakine benzer bir yanıt GetTodoItems üretir:

[
  {
    "id": 1,
    "name": "Item1",
    "isComplete": false
  }
]

Postman ile Get testi

  • Yeni bir istek oluşturun.
  • HTTP yöntemini GET olarak ayarlayın.
  • İstek URI'si olarak https://localhost:<port>/api/todoitems ayarlayın. Örneğin, https://localhost:5001/api/todoitems.
  • Postman'de İki bölmeli görünümü ayarlayın.
  • Gönder’i seçin.

Bu uygulama bir bellek içinde veritabanı kullanır. Uygulama durdurulur ve başlatıldıktan sonra önceki GET isteği herhangi bir veri vermez. Hiçbir veri döndürülzse, uygulamaya POST verileri.

Yönlendirme ve URL yolları

özniteliği, [HttpGet] bir HTTP GET isteğine yanıt veren bir yöntemi ifade ediyor. Her yöntemin URL yolu aşağıdaki gibi oluşturulur:

  • Denetleyicinin özniteliğinde şablon dizesiyle Route çalışmaya başlama:

    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemsController : ControllerBase
    {
        private readonly TodoContext _context;
    
        public TodoItemsController(TodoContext context)
        {
            _context = context;
        }
    
  • yerine denetleyicinin adını yazın; kurala göre denetleyici sınıfı adı [controller] eksi "Denetleyici" soneki olur. Bu örnek için denetleyici sınıfı adı TodoItems Controller' olduğu için denetleyici adı "TodoItems" olur. ASP.NET Core büyük/büyük/büyük harfe duyarlı değildir.

  • Özniteliğin [HttpGet] bir yol şablonu varsa (örneğin, ), bunu yola [HttpGet("products")] ekler. Bu örnek şablon kullanmaz. Daha fazla bilgi için bkz. Http[Fiil] öznitelikleriyle öznitelik yönlendirme.

Aşağıdaki GetTodoItem yöntemde, "{id}" yapılacaklar öğesinin benzersiz tanımlayıcısı için bir yer tutucu değişkenidir. GetTodoItemÇağrıldığında, "{id}" URL'de değeri yöntemine parametresinde id sağlanır.

// GET: api/TodoItems/5
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    return todoItem;
}

Dönüş değerleri

ve yöntemlerinin dönüş GetTodoItems GetTodoItem türü ActionResult t <T> t tür. ASP.NET Core nesnesini otomatik olarak JSON'a seri hale getirmez ve JSON'u yanıt iletisi gövdesine yazar. İşsiz özel durumların olmadığını varsayarak, bu dönüş türü için yanıt kodu 200'tir. İşlenemeyen özel durumlar 5xx hatalarına çevrilir.

ActionResult dönüş türleri çok çeşitli HTTP durum kodlarını temsil ediyor olabilir. Örneğin, GetTodoItem iki farklı durum değeri getirebilirsiniz:

  • İstenen kimlikle eşleşen bir öğe yoksa yöntem 404 hata NotFound kodunu döndürür.
  • Aksi takdirde, yöntem bir JSON yanıt gövdesi ile 200 döndürür. Http item 200 yanıtı döndüren sonuçlar.

PutTodoItem yöntemi

PutTodoItem yöntemini inceleyin:

// PUT: api/TodoItems/5
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
    if (id != todoItem.Id)
    {
        return BadRequest();
    }

    _context.Entry(todoItem).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!TodoItemExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return NoContent();
}

PutTodoItem , ile PostTodoItem benzerdir, ancak HTTP PUT kullanır. Yanıt: 204 (İçerik Yok). HTTP belirtimına göre PUT isteği, istemcinin yalnızca değişiklikleri değil güncelleştirilmiş varlığın tamamını göndermesini gerektirir. Kısmi güncelleştirmeleri desteklemek için HTTP PATCH kullanın.

çağrısında bir hata PutTodoItem alırsanız, veritabanında bir öğe olduğundan emin olmak için öğesini GET arayın.

PutTodoItem yöntemini test etmek

Bu örnek, uygulama her başlatıcıda başlatılması gereken bir bellek içinde veritabanı kullanır. PUT çağrısı öncesinde veritabanında bir öğe olmalıdır. PUT çağrısı yapmadan önce veritabanında bir öğe olduğundan emin olmak için GET çağrısı yapma.

Id = 1 olan to-do öğesini güncelleştirin ve adını "akış yemi" olarak ayarlayın:

  {
    "id":1,
    "name":"feed fish",
    "isComplete":true
  }

Aşağıdaki görüntüde Postman güncelleştirmesi yer amektedir:

204 (İçerik Yok) yanıtını gösteren Postman konsolu

DeleteTodoItem yöntemi

DeleteTodoItem yöntemini inceleyin:

// DELETE: api/TodoItems/5
[HttpDelete("{id}")]
public async Task<ActionResult<TodoItem>> DeleteTodoItem(long id)
{
    var todoItem = await _context.TodoItems.FindAsync(id);
    if (todoItem == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todoItem);
    await _context.SaveChangesAsync();

    return todoItem;
}

DeleteTodoItem yöntemini test etmek

Postman kullanarak bir to-do öğesini silin:

  • yöntemini olarak DELETE ayarlayın.
  • Silinecek nesnenin URI'lerini ayarlayın https://localhost:5001/api/todoitems/1 (örneğin).
  • Gönder’i seçin.

Fazla gönderiyi engelleme

Şu anda örnek uygulama nesnenin tamamını TodoItem gösterir. Üretim uygulamaları genellikle girişi yapılan ve modelin bir alt kümesi kullanılarak döndürülen verileri sınırlandırr. Bunun birden çok nedeni vardır ve güvenlik önemli bir nedendir. Modelin alt kümesi genellikle Veri Aktarım Nesnesi (DTO), giriş modeli veya görünüm modeli olarak adlandırılır. Bu makalede DTO kullanılmıştır.

DTO aşağıdakiler için kullanılabilir:

  • Fazla gönderiyi önle.
  • İstemcilerin görüntülemesi gereken özellikleri gizle.
  • Yük boyutunu azaltmak için bazı özellikleri atla.
  • İç içe nesneleri içeren nesne grafiklerini düzlük. Düz nesne grafları istemciler için daha kullanışlı olabilir.

DTO yaklaşımını göstermek için sınıfını TodoItem gizli bir alan içerecek şekilde güncelleştirin:

public class TodoItem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
    public string Secret { get; set; }
}

Gizli alan bu uygulamadan gizlenir, ancak bir yönetim uygulaması bunu açığa çıkarmayı seçebilir.

Gizli alan yayınlaya ve alacı 2.000.000'e kadar olan tüm bilgileri girin.

DTO modeli oluşturma:

public class TodoItemDTO
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
}

kullanmak TodoItemsController için 'i TodoItemDTO güncelleştirin:

    [HttpGet]
    public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems()
    {
        return await _context.TodoItems
            .Select(x => ItemToDTO(x))
            .ToListAsync();
    }

    [HttpGet("{id}")]
    public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id)
    {
        var todoItem = await _context.TodoItems.FindAsync(id);

        if (todoItem == null)
        {
            return NotFound();
        }

        return ItemToDTO(todoItem);
    }

    [HttpPut("{id}")]
    public async Task<IActionResult> UpdateTodoItem(long id, TodoItemDTO todoItemDTO)
    {
        if (id != todoItemDTO.Id)
        {
            return BadRequest();
        }

        var todoItem = await _context.TodoItems.FindAsync(id);
        if (todoItem == null)
        {
            return NotFound();
        }

        todoItem.Name = todoItemDTO.Name;
        todoItem.IsComplete = todoItemDTO.IsComplete;

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException) when (!TodoItemExists(id))
        {
            return NotFound();
        }

        return NoContent();
    }

    [HttpPost]
    public async Task<ActionResult<TodoItemDTO>> CreateTodoItem(TodoItemDTO todoItemDTO)
    {
        var todoItem = new TodoItem
        {
            IsComplete = todoItemDTO.IsComplete,
            Name = todoItemDTO.Name
        };

        _context.TodoItems.Add(todoItem);
        await _context.SaveChangesAsync();

        return CreatedAtAction(
            nameof(GetTodoItem),
            new { id = todoItem.Id },
            ItemToDTO(todoItem));
    }

    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteTodoItem(long id)
    {
        var todoItem = await _context.TodoItems.FindAsync(id);

        if (todoItem == null)
        {
            return NotFound();
        }

        _context.TodoItems.Remove(todoItem);
        await _context.SaveChangesAsync();

        return NoContent();
    }

    private bool TodoItemExists(long id) =>
         _context.TodoItems.Any(e => e.Id == id);

    private static TodoItemDTO ItemToDTO(TodoItem todoItem) =>
        new TodoItemDTO
        {
            Id = todoItem.Id,
            Name = todoItem.Name,
            IsComplete = todoItem.IsComplete
        };       
}

Gizli alan gönderileye veya alana alamayanı doğrulayın.

JavaScript ile web API'sini çağırma

Bkz. Öğretici: JavaScript ASP.NET Core web API'si çağırma.

Web API'sini kimlik doğrulaması desteği ekleme

ASP.NET Core Identityweb uygulamalarına kullanıcı arabirimi (UI) ASP.NET Core işlevselliği ekler. Web API'lerinin ve SPA'ların güvenliğini sağlamak için aşağıdakilerden birini kullanın:

IdentityServer4, bir OpenID Bağlan ve OAuth 2.0 çerçevesidir ASP.NET Core. IdentityServer4 aşağıdaki güvenlik özelliklerini sağlar:

  • Hizmet Olarak Kimlik Doğrulaması (AaaS)
  • Birden çok uygulama türü üzerinde çoklu oturum açma/kapatma (SSO)
  • API'ler için erişim denetimi
  • Federasyon Ağ Geçidi

Daha fazla bilgi için bkz. Identity Server4'e Hoş Geldiniz.

Ek kaynaklar

Bu öğretici için örnek kodu görüntüleme veya indirme. Bkz. indirme.

Daha fazla bilgi için aşağıdaki kaynaklara bakın: