ASP.NET Core Kitap Listeleme Projesi Ders 11

API Oluşturma İşleminin Gerçekleştirilmesi

Bu dersimizde datatable ile kitap verileirni JSON formatında API kullanarak çekeceğiz. Böylelikle burada düzenleme ve hatta silme işlemleri gerçekleştirmenin de yöntemini göstermek istiyorum. Projemizde API kullanabilmek için öncelikle web api eklememiz gerek. Projemize yeni bir klasör ekliyorum ve adını Controllers verdim, isme dikkat edin. İsmi mutlaka bu şekilde kullanın. Daha sonra bu klasöre sağ tıklıyor ve Add>Controller seçiyorum. Çıkan menüde MVC Controller – Empty seçtim. Controller adını da KitapController veriyorum.

Dersin video versiyonunu izlemenizi de öneririm.

Hemen kodlarımı yazıyorum:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using KitapListesiProjesi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace KitapListesiProjesi.Controllers
{
    
    public class KitapController : Controller
    {
        private readonly KLDbContext _db;

        public KitapController(KLDbContext db)
        {
            _db = db;
        }

        [HttpGet]
        public async Task< IActionResult > GetAll()
        {
            return Json(new { data = await _db.Kitap.ToListAsync() }); 
        }


    }
}

Öncelikle KLDbContext üzerinden bir _db nesnesi türettim daha sonra  constructor oluşturmdum ve DI işlemimi yaptım. Daha sonra listeleme işlemi için HttpGet attribute’ünü GetAll metoduma ekledim. Geriye bir JSON dönüyoruz.

Şu an api henüz hazır değil, bunun için startup classıma geliyorum ve iligli servisleri açıp, endpoint tanımlaması yapmam gerek.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using KitapListesiProjesi.Models;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

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

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext< KLDbContext >(options => options.UseSqlServer(Configuration.GetConnectionString("Baglanti")));
            services.AddControllersWithViews();
            services.AddRazorPages();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            'if' (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

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

Not: wp hatasını aşabilmek için if önünde ve sonunda tırnak kullandım, kodların içinde tırnak bulunmamaktadır. Video da detayı görebilirsiniz.

AddControllerWithViews ile viewler ile ilgili kontrollerin eklenmesini sağlayan servisleri açıyorum ve böylelikle api’lar artık projeme eklenmiş oluyor. Daha sonra ilgili middlewre ekleme işlemim için UseEndpoints altında MapControllers’i ekledim.

Şimdi KitapController’a dönüyorum ve buraya da route ve apicontroller attribute’leri ekledim. Böylelikle ben KitapControllerin api controller olduğunu ve buradaki url’in kullanılması gerektiğini uygulamama tanımlamış oldum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using KitapListesiProjesi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace KitapListesiProjesi.Controllers
{
    [Route("api/Kitap")]
    [ApiController]
    public class KitapController : Controller
    {
        private readonly KLDbContext _db;

        public KitapController(KLDbContext db)
        {
            _db = db;
        }

        [HttpGet]
        public async Task< IActionResult > GetAll()
        {
            return Json(new { data = await _db.Kitap.ToListAsync() }); 
        }


    }
}

Bir sonraki derste görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir