logo
eng-flag

ASP.NET Notları ve İpuçları

İçindekiler

  1. ASP.NET Temelleri
  2. ASP.NET Core
  3. MVC Deseni
  4. Yönlendirme
  5. Denetleyiciler ve Eylemler
  6. Görünümler ve Razor Sözdizimi
  7. Modeller ve Veri Bağlama
  8. Entity Framework Core
  9. Bağımlılık Enjeksiyonu
  10. Ara Yazılım
  11. Kimlik Doğrulama ve Yetkilendirme
  12. Web API
  13. Test Etme
  14. Dağıtım
  15. En İyi Uygulamalar

ASP.NET Temelleri

ASP.NET Nedir?

ASP.NET, Microsoft tarafından geliştirilen ücretsiz, açık kaynaklı bir web uygulama çerçevesidir. Dinamik web siteleri, web uygulamaları ve web servisleri oluşturmak için kullanılır.

Temel Özellikler

  • Çapraz platform
  • Yüksek performans
  • Açık kaynak
  • Modern, bileşen tabanlı mimari

ASP.NET Projesi Oluşturma

ASP.NET projesi oluşturmak için şunları kullanabilirsiniz:

  1. Visual Studio
  2. .NET CLI ile Visual Studio Code
  3. Yalnızca .NET CLI

.NET CLI kullanarak örnek:

dotnet new webapp -n BenimAspNetProjem
cd BenimAspNetProjem
dotnet run

ASP.NET Core

ASP.NET Core, ASP.NET'in çapraz platform, yüksek performanslı evrimi.

Program.cs

Bir ASP.NET Core uygulamasının giriş noktası:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Startup.cs

Servisleri ve uygulamanın istek hattını yapılandırır:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

MVC Deseni

ASP.NET Core MVC, ilgilerin ayrılmasını sağlamak için bir tasarım desenidir.

  • Model: Veriyi ve iş mantığını temsil eder
  • View (Görünüm): Kullanıcı arayüzü ve sunumu yönetir
  • Controller (Denetleyici): Kullanıcı isteklerini ve yanıtlarını yönetir

Yönlendirme

Yönlendirme, gelen HTTP isteklerini denetleyici eylemlerine eşleştirme sürecidir.

Geleneksel Yönlendirme

Startup.cs içinde ayarlanır:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Öznitelik Yönlendirme

Doğrudan denetleyici eylemlerine uygulanır:

[Route("api/[controller]")]
public class UrunlerController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult Get(int id)
    {
        // Eylem metodu uygulaması
    }
}

Denetleyiciler ve Eylemler

Denetleyiciler, gelen istekleri işler ve istemciye yanıt döndürür.

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Hakkinda()
    {
        ViewData["Mesaj"] = "Uygulama açıklama sayfanız.";
        return View();
    }

    [HttpPost]
    public IActionResult Iletisim(IletisimViewModel model)
    {
        if (ModelState.IsValid)
        {
            // İletişim formunu işle
            return RedirectToAction("Tesekkurler");
        }
        return View(model);
    }
}

Görünümler ve Razor Sözdizimi

Görünümler, içeriği kullanıcıya sunmaktan sorumludur. Razor, sunucu tabanlı kodu web sayfalarına gömmek için kullanılan bir işaretleme sözdizimi.

Razor Sözdizimi Örnekleri

@{
    ViewData["Title"] = "Ana Sayfa";
}

<h1>Siteme hoş geldiniz, @User.Identity.Name!</h1>

@if (User.IsInRole("Admin"))
{
    <p>Siz bir yöneticisiniz.</p>
}

<ul>
@foreach (var item in Model)
{
    <li>@item.Ad</li>
}
</ul>

Modeller ve Veri Bağlama

Modeller uygulamanın verilerini temsil eder. Veri bağlama, HTTP istek verilerini C# nesnelerine eşleme sürecidir.

public class Urun
{
    public int Id { get; set; }
    [Required]
    public string Ad { get; set; }
    [Range(0.01, 1000.00)]
    public decimal Fiyat { get; set; }
}

public class UrunController : Controller
{
    [HttpPost]
    public IActionResult Olustur(Urun urun)
    {
        if (ModelState.IsValid)
        {
            // Ürünü kaydet
            return RedirectToAction("Index");
        }
        return View(urun);
    }
}

Entity Framework Core

Entity Framework Core, veri erişimini basitleştiren bir nesne-ilişkisel eşleyicidir (ORM).

DbContext

public class UygulamaDbContext : DbContext
{
    public UygulamaDbContext(DbContextOptions<UygulamaDbContext> options)
        : base(options)
    {
    }

    public DbSet<Urun> Urunler { get; set; }
}

Göçler

dotnet ef migrations add IlkOlusturma
dotnet ef database update

LINQ Sorguları

public IActionResult Index()
{
    var urunler = _context.Urunler
                          .Where(u => u.Fiyat > 10)
                          .OrderBy(u => u.Ad)
                          .ToList();
    return View(urunler);
}

Bağımlılık Enjeksiyonu

ASP.NET Core, bağımlılık enjeksiyonu için yerleşik destek sağlar.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<UygulamaDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("VarsayilanBaglanti")));
    
    services.AddScoped<IUrunRepository, UrunRepository>();
    services.AddTransient<IBildirimServisi, EPostaBildirimServisi>();
    services.AddSingleton<IUygulamaOnbellek, BellekOnbellek>();
}

public class UrunController : Controller
{
    private readonly IUrunRepository _repository;
    
    public UrunController(IUrunRepository repository)
    {
        _repository = repository;
    }
    
    // Denetleyici eylemleri
}

Ara Yazılım

Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama hattına monte edilen yazılımdır.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseExceptionHandler("/Home/Error");
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Kimlik Doğrulama ve Yetkilendirme

ASP.NET Core, kimlik doğrulama ve yetkilendirme için yerleşik destek sağlar.

Kimlik Doğrulama

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = "/Hesap/Giris";
        });
}

public void Configure(IApplicationBuilder app)
{
    app.UseAuthentication();
    app.UseAuthorization();
}

Yetkilendirme

[Authorize]
public class YoneticiController : Controller
{
    [Authorize(Roles = "UstYonetici")]
    public IActionResult GizliIslem()
    {
        return View();
    }
}

Web API

ASP.NET Core, Web API kullanarak RESTful servisler oluşturmayı destekler.

[Route("api/[controller]")]
[ApiController]
public class UrunlerController : ControllerBase
{
    private readonly IUrunRepository _repository;

    public UrunlerController(IUrunRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public ActionResult<IEnumerable<Urun>> GetUrunler()
    {
        return _repository.TumunuGetir().ToList();
    }

    [HttpGet("{id}")]
    public ActionResult<Urun> GetUrun(int id)
    {
        var urun = _repository.IdIleGetir(id);
        if (urun == null)
        {
            return NotFound();
        }
        return urun;
    }

    [HttpPost]
    public ActionResult<Urun> PostUrun(Urun urun)
    {
        _repository.Ekle(urun);
        return CreatedAtAction(nameof(GetUrun), new { id = urun.Id }, urun);
    }
}

Test Etme

ASP.NET Core, birim testini ve entegrasyon testini destekler.

Birim Testi

public class UrunServisTestleri
{
    [Fact]
    public void IdIleUrunGetir_UrunVarsa_UrunuDondurur()
    {
        // Düzenle
        var mockRepository = new Mock<IUrunRepository>();
        mockRepository.Setup(repo => repo.IdIleGetir(1))
            .Returns(new Urun { Id = 1, Ad = "Test Ürünü" });
        var urunServisi = new UrunServisi(mockRepository.Object);

        // İşlem
        var sonuc = urunServisi.IdIleUrunGetir(1);

        // Doğrula
        Assert.NotNull(sonuc);
        Assert.Equal(1, sonuc.Id);
        Assert.Equal("Test Ürünü", sonuc.Ad);
    }
}

Entegrasyon Testi

public class UrunControllerEntegrasyonTestleri : IClassFixture<WebApplicationFactory<Startup>>
{
    private readonly WebApplicationFactory<Startup> _factory;

    public UrunControllerEntegrasyonTestleri(WebApplicationFactory<Startup> factory)
    {
        _factory = factory;
    }

    [Fact]
    public async Task UrunleriGetir_BasariliDurumKoduDondurur()
    {
        // Düzenle
        var client = _factory.CreateClient();

        // İşlem
        var yanit = await client.GetAsync("/api/urunler");

        // Doğrula
        yanit.EnsureSuccessStatusCode();
    }
}

Dağıtım

ASP.NET Core uygulamaları çeşitli platformlara dağıtılabilir.

Yayınlama

dotnet publish -c Release

Barındırma Seçenekleri

  • Windows'ta IIS
  • Linux'ta Nginx
  • Docker konteynerleri
  • Azure App Service
  • AWS Elastic Beanstalk

En İyi Uygulamalar

  1. Tek Sorumluluk İlkesini takip edin
  2. Bağımlılık enjeksiyonu kullanın
  3. ILogger kullanarak günlükleme uygulayın
  4. async/await ile asenkron programlama kullanın
  5. Uygulamanızı güvenli hale getirin (HTTPS kullanın, kimlik doğrulama ve yetkilendirme uygulayın)

2024 © Tüm hakları saklıdır - buraxta.com