Aracılığıyla paylaş


ASP.NET Core temellerine genel bakış

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Bu makalede, bağımlılık ekleme (DI), yapılandırma, ara yazılım ve daha fazlası dahil olmak üzere ASP.NET Core uygulamaları oluşturmaya yönelik temellere bir genel bakış sunulmaktadır.

Blazor Bu düğümdeki yönergeleri ekleyen veya yerine geçen temel bilgiler için bkz. temel ASP.NET Blazor temel bilgiler.

Program.cs

Web şablonlarıyla oluşturulan ASP.NET Core uygulamaları, Program.cs dosyasındaki uygulama başlangıç kodunu içerir. Program.cs dosyası şu durumda:

  • Uygulamanın gerektirdiği hizmetler yapılandırılır.
  • Uygulamanın istek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak tanımlanır.

Aşağıdaki uygulama başlangıç kodu aşağıdakileri destekler:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Bağımlılık ekleme (hizmetler)

ASP.NET Core, yapılandırılmış hizmetleri uygulama genelinde kullanılabilir hale getiren bağımlılık ekleme (DI) içerir. Hizmetler, builder.Services önceki kodda WebApplicationBuilder.Services ile DI kapsayıcısına eklenir. WebApplicationBuilder örneği oluşturulurken, birçok çerçeve tarafından sağlanan hizmet eklenir. builder aşağıdaki kodda bir WebApplicationBuilder öğesidir:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

Yukarıdaki vurgulanan kodda, builder DI kapsayıcısına eklenen yapılandırma, günlük ve diğer birçok hizmet bulunur.

Aşağıdaki kod Razor Sayfaları, görünümlere sahip MVC denetleyicileri ve DI kapsayıcısına bir özel DbContext ekler:

using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));

var app = builder.Build();

Hizmetler genellikle oluşturucu eklemesi kullanılarak DI'den çözümlenir. DI çerçevesi, çalışma zamanında bu hizmetin bir örneğini sağlar.

Aşağıdaki kod, DI'den veritabanı bağlamını ve günlükçüleri çözümlemek için oluşturucu eklemesini kullanır:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Ara yazılım

İstek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak oluşturulur. Her bileşen bir HttpContext üzerinde işlemler gerçekleştirir ve ya işlem hattındaki sonraki ara yazılımı çağırır ya da isteği sonlandırır.

Kural gereği, bir Use{Feature} uzantı yöntemi çağrılarak işlem hattına bir ara yazılım bileşeni eklenir. Uygulamaya eklenen ara yazılım aşağıdaki kodda vurgulanır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core Ara Yazılımı.

Ana Bilgisayar

Başlangıçta, bir ASP.NET Core uygulaması bir ana bilgisayar oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:

  • Bir HTTP sunucusu uygulaması
  • Ara yazılım bileşenleri
  • Günlük Kaydı
  • Bağımlılık ekleme (DI) hizmetleri
  • Yapılandırma

ASP.NET Core uygulamasını çalıştırabilen üç farklı konak vardır:

ASP.NET Core WebApplication ve WebApplicationBuilder türleri tüm ASP.NET Core şablonlarında önerilir ve kullanılır. WebApplication .NET Genel Konağına benzer şekilde davranır ve aynı arabirimlerin çoğunu kullanıma sunar, ancak yapılandırmak için daha az geri çağırma gerektirir. ASP.NET Core WebHost yalnızca geriye dönük uyumluluk için kullanılabilir.

Aşağıdaki örnek bir WebApplicationörneği oluşturur:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

WebApplicationBuilder.Build yöntemi, bir ana bilgisayarı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırır:

  • Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
  • appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yapılandırma yükleme.
  • Günlüğe kaydetme çıkışını konsola gönderin ve sağlayıcılarda hata ayıklayın.

Web dışı senaryolar

Genel Ana Bilgisayar, diğer uygulama türlerinin günlüğe kaydetme, bağımlılık ekleme (DI), yapılandırma ve uygulama yaşam süresi yönetimi gibi çapraz kesme çerçevesi uzantılarını kullanmasına olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'de .NET Genel Ana Bilgisayarı ve ASP.NET Core'da barındırılan hizmetlerle arka plan görevleri.

Sunucular

ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, uygulamaya yönelik istekleri bir HttpContext içinde oluşturulan bir istek özellikleri kümesi olarak gösterir.

ASP.NET Core aşağıdaki sunucu uygulamalarını sağlar:

  • Kestrel platformlar arası bir web sunucusudur. Kestrel genellikle IIS kullanılarak ters ara sunucu yapılandırmasında çalıştırılır. ASP.NET Core 2.0 veya sonraki sürümlerinde, Kestrel doğrudan İnternet'e açık genel kullanıma yönelik bir uç sunucu olarak çalıştırılabilir.
  • IIS HTTP Sunucusu, Windows için IIS kullanan bir sunucudur. Bu sunucuyla, ASP.NET Core uygulaması ve IIS aynı işlemde çalışır.
  • HTTP.sys, WINDOWS için IIS ile kullanılmayan bir sunucudur.

Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.

Yapılandırma

ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcıları kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.

Varsayılan olarak, ASP.NET Core uygulamaları, appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.

.NET Core, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi sağlar. Üretim gizli dizileri için Azure Key Vault öneririz.

Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.

Ortamlar

Development, Staging ve Production gibi yürütme ortamları ASP.NET Core'da kullanılabilir. ASPNETCORE_ENVIRONMENT ortam değişkenini ayarlayarak bir uygulamanın çalıştığı ortamı belirtin. ASP.NET Core bu ortam değişkenini uygulama başlangıcında okur ve değeri bir IWebHostEnvironment uygulamasında depolar. Bu uygulama, bağımlılık ekleme (DI) aracılığıyla bir uygulamanın herhangi bir yerinde kullanılabilir.

Aşağıdaki örnek, Development ortamında çalışmadığında özel durum işleyicisini ve HTTP Katı Aktarım Güvenlik Protokolü (HSTS) ara yazılımını yapılandırır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Günlük Kaydı

ASP.NET Core, çeşitli yerleşik ve üçüncü taraf günlük sağlayıcılarıyla çalışan bir günlük API'sini destekler. Kullanılabilir sağlayıcılar şunlardır:

  • Konsol
  • Hata Ayıklama
  • Windows'da Olay İzleme
  • Windows Olay Günlükleri
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Günlükler oluşturmak için, bağımlılık eklemeden (DI) bir ILogger<TCategoryName> hizmetini çözümleyin ve LogInformation gibi günlüğe kaydetme yöntemlerini çağırın. Örneğin:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.

Yönlendirme

Yol, bir işleyiciye eşlenen bir URL desenidir. İşleyici genellikle bir Razor sayfası, MVC denetleyicisindeki bir eylem yöntemi veya ara yazılımdır. ASP.NET Core yönlendirme, uygulamanız tarafından kullanılan URL'ler üzerinde denetim sağlar.

ASP.NET Core web uygulaması şablonu tarafından oluşturulan aşağıdaki kod UseRouting çağırır:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core’da Yönlendirme.

Hata işleme

ASP.NET Core, hataları işlemek için, şunlar gibi yerleşik özelliklere sahiptir:

  • Geliştirici özel durum sayfası
  • Özel hata sayfaları
  • Statik durum kodu sayfaları
  • Özel durum işlemeyi başlatma

Daha fazla bilgi için, bkz. ASP.NET Core’da hataları işleme.

HTTP istekleri oluşturma

Bir IHttpClientFactory uygulaması HttpClient örnekleri oluşturmak için kullanılabilir. Üreteç:

  • Mantıksal HttpClient örneklerini adlandırmak ve yapılandırmak için merkezi bir konum sağlar. Örneğin, GitHub’a erişmek için bir github istemcisi kaydedin ve yapılandırın. Diğer amaçlar için varsayılan istemciyi kaydedin ve yapılandırın.
  • Giden istek ara yazılım işlem hattı oluşturmak için, birden çok temsilci atama işleyicisinin kaydını ve zincirini destekler. Bu düzen, ASP.NET Core’un gelen ara yazılım işlem hattına benzer. Desen, önbelleğe alma, hata işleme, serileştirme ve günlüğe kaydetme dahil olmak üzere HTTP isteklerine yönelik kesme sorunlarını yönetmek için bir mekanizma sağlar.
  • Geçici hata işleme için popüler bir üçüncü taraf kitaplığı olan Polly ile tümleşir.
  • HttpClient yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınan HttpClientHandler örneklerinin havuza alınmasını ve yaşam süresini yönetir.
  • Fabrika tarafından oluşturulan istemciler aracılığıyla gönderilen tüm istekler için ILogger aracılığıyla yapılandırılabilir bir günlüğe kaydetme deneyimi ekler.

Daha fazla bilgi için, bkz. ASP.NET Core'da IHttpClientFactory kullanarak HTTP isteği yapma.

İçerik kökü

İçerik kökü, aşağıdakiler için temel yoldur:

  • Uygulamayı barındıran yürütülebilir dosya (.exe).
  • Uygulamayı oluşturan derlenmiş bütünleştirilmiş kodlar (.dll).
  • Uygulama tarafından kullanılan içerik dosyaları, örneğin:
    • Razor dosyaları (.cshtml, .razor)
    • Yapılandırma dosyaları (.json, .xml)
    • Veri dosyaları (.db)
  • Web kökü, genellikle wwwroot klasörü.

Geliştirme sırasında içerik kökü varsayılan olarak projenin kök dizinine ayarlanır. Bu dizin aynı zamanda hem uygulamanın içerik dosyaları hem de Web kökü için temel yoldur. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir içerik kökü belirtin. Daha fazla bilgi içi,n bkz. İçerik kökü.

Web kökü

Web kökü, aşağıdakiler gibi genel, statik kaynak dosyalarının temel yoludur:

  • Stil Sayfaları (.css)
  • JavaScript (.js)
  • Görüntüler (.png, .jpg)

Varsayılan olarak, statik dosyalar yalnızca web kök dizininden ve alt dizinlerinden sunulur. Web kökü yolu varsayılan olarak {content root}/wwwroot şeklinde ayarlanır. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için, bkz. Web kökü.

Proje dosyasındaki <İçerik ve proje öğesiyle dosyaların wwwroot'ta yayınlanmasını engelleyin. Aşağıdaki örnek, wwwroot/local dizininde ve alt dizinlerinde içerik yayımlamayı engeller:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Razor.cshtml dosyalarında ~/, web kökünü gösterir. ~/ ile başlayan bir yol, sanal yol olarak adlandırılır.

Daha fazla bilgi için, bkz. ASP.NET Core statik dosyaları.

Ek kaynaklar

Bu makalede, bağımlılık ekleme (DI), yapılandırma, ara yazılım ve daha fazlası dahil olmak üzere ASP.NET Core uygulamaları oluşturmaya yönelik temellere bir genel bakış sunulmaktadır.

Program.cs

Web şablonlarıyla oluşturulan ASP.NET Core uygulamaları, Program.cs dosyasındaki uygulama başlangıç kodunu içerir. Program.cs dosyası şu durumda:

  • Uygulamanın gerektirdiği hizmetler yapılandırılır.
  • Uygulamanın istek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak tanımlanır.

Aşağıdaki uygulama başlangıç kodu aşağıdakileri destekler:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Bağımlılık ekleme (hizmetler)

ASP.NET Core, yapılandırılmış hizmetleri uygulama genelinde kullanılabilir hale getiren bağımlılık ekleme (DI) içerir. Hizmetler, builder.Services önceki kodda WebApplicationBuilder.Services ile DI kapsayıcısına eklenir. WebApplicationBuilder örneği oluşturulurken, birçok çerçeve tarafından sağlanan hizmet eklenir. builder aşağıdaki kodda bir WebApplicationBuilder öğesidir:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

Yukarıdaki vurgulanan kodda, builder DI kapsayıcısına eklenen yapılandırma, günlük ve diğer birçok hizmet bulunur.

Aşağıdaki kod Razor Sayfaları, görünümlere sahip MVC denetleyicileri ve DI kapsayıcısına bir özel DbContext ekler:

using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));

var app = builder.Build();

Hizmetler genellikle oluşturucu eklemesi kullanılarak DI'den çözümlenir. DI çerçevesi, çalışma zamanında bu hizmetin bir örneğini sağlar.

Aşağıdaki kod, DI'den veritabanı bağlamını ve günlükçüleri çözümlemek için oluşturucu eklemesini kullanır:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Ara yazılım

İstek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak oluşturulur. Her bileşen bir HttpContext üzerinde işlemler gerçekleştirir ve ya işlem hattındaki sonraki ara yazılımı çağırır ya da isteği sonlandırır.

Kural gereği, bir Use{Feature} uzantı yöntemi çağrılarak işlem hattına bir ara yazılım bileşeni eklenir. Uygulamaya eklenen ara yazılım aşağıdaki kodda vurgulanır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core Ara Yazılımı.

Ana Bilgisayar

Başlangıçta, bir ASP.NET Core uygulaması bir ana bilgisayar oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:

  • Bir HTTP sunucusu uygulaması
  • Ara yazılım bileşenleri
  • Günlük Kaydı
  • Bağımlılık ekleme (DI) hizmetleri
  • Yapılandırma

ASP.NET Core uygulamasını çalıştırabilen üç farklı konak vardır:

ASP.NET Core WebApplication ve WebApplicationBuilder türleri tüm ASP.NET Core şablonlarında önerilir ve kullanılır. WebApplication .NET Genel Konağına benzer şekilde davranır ve aynı arabirimlerin çoğunu kullanıma sunar, ancak yapılandırmak için daha az geri çağırma gerektirir. ASP.NET Core WebHost yalnızca geriye dönük uyumluluk için kullanılabilir.

Aşağıdaki örnek bir WebApplicationörneği oluşturur:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

WebApplicationBuilder.Build yöntemi, bir ana bilgisayarı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırır:

  • Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
  • appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yapılandırma yükleme.
  • Günlüğe kaydetme çıkışını konsola gönderin ve sağlayıcılarda hata ayıklayın.

Web dışı senaryolar

Genel Ana Bilgisayar, diğer uygulama türlerinin günlüğe kaydetme, bağımlılık ekleme (DI), yapılandırma ve uygulama yaşam süresi yönetimi gibi çapraz kesme çerçevesi uzantılarını kullanmasına olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'de .NET Genel Ana Bilgisayarı ve ASP.NET Core'da barındırılan hizmetlerle arka plan görevleri.

Sunucular

ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, uygulamaya yönelik istekleri bir HttpContext içinde oluşturulan bir istek özellikleri kümesi olarak gösterir.

ASP.NET Core aşağıdaki sunucu uygulamalarını sağlar:

  • Kestrel platformlar arası bir web sunucusudur. Kestrel genellikle IIS kullanılarak ters ara sunucu yapılandırmasında çalıştırılır. ASP.NET Core 2.0 veya sonraki sürümlerinde, Kestrel doğrudan İnternet'e açık genel kullanıma yönelik bir uç sunucu olarak çalıştırılabilir.
  • IIS HTTP Sunucusu, Windows için IIS kullanan bir sunucudur. Bu sunucuyla, ASP.NET Core uygulaması ve IIS aynı işlemde çalışır.
  • HTTP.sys, WINDOWS için IIS ile kullanılmayan bir sunucudur.

Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.

Yapılandırma

ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcıları kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.

Varsayılan olarak, ASP.NET Core uygulamaları, appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.

.NET Core, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi sağlar. Üretim gizli dizileri için Azure Key Vault öneririz.

Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.

Ortamlar

Development, Staging ve Production gibi yürütme ortamları ASP.NET Core'da kullanılabilir. ASPNETCORE_ENVIRONMENT ortam değişkenini ayarlayarak bir uygulamanın çalıştığı ortamı belirtin. ASP.NET Core bu ortam değişkenini uygulama başlangıcında okur ve değeri bir IWebHostEnvironment uygulamasında depolar. Bu uygulama, bağımlılık ekleme (DI) aracılığıyla bir uygulamanın herhangi bir yerinde kullanılabilir.

Aşağıdaki örnek, Development ortamında çalışmadığında özel durum işleyicisini ve HTTP Katı Aktarım Güvenlik Protokolü (HSTS) ara yazılımını yapılandırır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Günlük Kaydı

ASP.NET Core, çeşitli yerleşik ve üçüncü taraf günlük sağlayıcılarıyla çalışan bir günlük API'sini destekler. Kullanılabilir sağlayıcılar şunlardır:

  • Konsol
  • Hata Ayıklama
  • Windows'da Olay İzleme
  • Windows Olay Günlükleri
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Günlükler oluşturmak için, bağımlılık eklemeden (DI) bir ILogger<TCategoryName> hizmetini çözümleyin ve LogInformation gibi günlüğe kaydetme yöntemlerini çağırın. Örneğin:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.

Yönlendirme

Yol, bir işleyiciye eşlenen bir URL desenidir. İşleyici genellikle bir Razor sayfası, MVC denetleyicisindeki bir eylem yöntemi veya ara yazılımdır. ASP.NET Core yönlendirme, uygulamanız tarafından kullanılan URL'ler üzerinde denetim sağlar.

ASP.NET Core web uygulaması şablonu tarafından oluşturulan aşağıdaki kod UseRouting çağırır:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core’da Yönlendirme.

Hata işleme

ASP.NET Core, hataları işlemek için, şunlar gibi yerleşik özelliklere sahiptir:

  • Geliştirici özel durum sayfası
  • Özel hata sayfaları
  • Statik durum kodu sayfaları
  • Özel durum işlemeyi başlatma

Daha fazla bilgi için, bkz. ASP.NET Core’da hataları işleme.

HTTP istekleri oluşturma

Bir IHttpClientFactory uygulaması HttpClient örnekleri oluşturmak için kullanılabilir. Üreteç:

  • Mantıksal HttpClient örneklerini adlandırmak ve yapılandırmak için merkezi bir konum sağlar. Örneğin, GitHub’a erişmek için bir github istemcisi kaydedin ve yapılandırın. Diğer amaçlar için varsayılan istemciyi kaydedin ve yapılandırın.
  • Giden istek ara yazılım işlem hattı oluşturmak için, birden çok temsilci atama işleyicisinin kaydını ve zincirini destekler. Bu düzen, ASP.NET Core’un gelen ara yazılım işlem hattına benzer. Desen, önbelleğe alma, hata işleme, serileştirme ve günlüğe kaydetme dahil olmak üzere HTTP isteklerine yönelik kesme sorunlarını yönetmek için bir mekanizma sağlar.
  • Geçici hata işleme için popüler bir üçüncü taraf kitaplığı olan Polly ile tümleşir.
  • HttpClient yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınan HttpClientHandler örneklerinin havuza alınmasını ve yaşam süresini yönetir.
  • Fabrika tarafından oluşturulan istemciler aracılığıyla gönderilen tüm istekler için ILogger aracılığıyla yapılandırılabilir bir günlüğe kaydetme deneyimi ekler.

Daha fazla bilgi için, bkz. ASP.NET Core'da IHttpClientFactory kullanarak HTTP isteği yapma.

İçerik kökü

İçerik kökü, aşağıdakiler için temel yoldur:

  • Uygulamayı barındıran yürütülebilir dosya (.exe).
  • Uygulamayı oluşturan derlenmiş bütünleştirilmiş kodlar (.dll).
  • Uygulama tarafından kullanılan içerik dosyaları, örneğin:
    • Razor dosyaları (.cshtml, .razor)
    • Yapılandırma dosyaları (.json, .xml)
    • Veri dosyaları (.db)
  • Web kökü, genellikle wwwroot klasörü.

Geliştirme sırasında içerik kökü varsayılan olarak projenin kök dizinine ayarlanır. Bu dizin aynı zamanda hem uygulamanın içerik dosyaları hem de Web kökü için temel yoldur. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir içerik kökü belirtin. Daha fazla bilgi içi,n bkz. İçerik kökü.

Web kökü

Web kökü, aşağıdakiler gibi genel, statik kaynak dosyalarının temel yoludur:

  • Stil Sayfaları (.css)
  • JavaScript (.js)
  • Görüntüler (.png, .jpg)

Varsayılan olarak, statik dosyalar yalnızca web kök dizininden ve alt dizinlerinden sunulur. Web kökü yolu varsayılan olarak {content root}/wwwroot şeklinde ayarlanır. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için, bkz. Web kökü.

Proje dosyasındaki <İçerik ve proje öğesiyle dosyaların wwwroot'ta yayınlanmasını engelleyin. Aşağıdaki örnek, wwwroot/local dizininde ve alt dizinlerinde içerik yayımlamayı engeller:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Razor.cshtml dosyalarında ~/, web kökünü gösterir. ~/ ile başlayan bir yol, sanal yol olarak adlandırılır.

Daha fazla bilgi için, bkz. ASP.NET Core statik dosyaları.

Ek kaynaklar

Bu makalede, bağımlılık ekleme (DI), yapılandırma, ara yazılım ve daha fazlası dahil olmak üzere ASP.NET Core uygulamaları oluşturmaya yönelik temellere bir genel bakış sunulmaktadır.

Başlangıç sınıfı

Şunlar olduğunda Startup sınıfı:

  • Uygulamanın gerektirdiği hizmetler yapılandırılır.
  • Uygulamanın istek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak tanımlanır.

Aşağıda bir Startup sınıfı örneği verilmiştir:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<RazorPagesMovieContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

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

Daha fazla bilgi için, bkz. ASP.NET Core'de uygulama başlatma.

Bağımlılık ekleme (hizmetler)

ASP.NET Core, yapılandırılmış hizmetleri uygulama genelinde kullanılabilir hale getiren yerleşik bağımlılık ekleme (DI) çerçevesini içerir. Örneğin, günlük bileşeni bir hizmettir.

Hizmetleri yapılandırmak (veya kaydetmek) için kod Startup.ConfigureServices yöntemine eklenir. Örneğin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<RazorPagesMovieContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

    services.AddControllersWithViews();
    services.AddRazorPages();
}

Hizmetler genellikle oluşturucu eklemesi kullanılarak DI'den çözümlenir. Oluşturucu ekleme ile bir sınıf, gerekli türde veya arabirimde bir oluşturucu parametresi bildirir. DI çerçevesi, çalışma zamanında bu hizmetin bir örneğini sağlar.

Aşağıdaki örnek, DI'den bir RazorPagesMovieContext çözümlemek için oluşturucu eklemesini kullanır:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

    public IndexModel(RazorPagesMovieContext context)
    {
        _context = context;
    }

    // ...

    public async Task OnGetAsync()
    {
        Movies = await _context.Movies.ToListAsync();
    }
}

Yerleşik Denetimi Tersine Çevirme (IoC) kapsayıcısı bir uygulamanın tüm ihtiyaçlarını karşılamıyorsa, bunun yerine üçüncü taraf bir IoC kapsayıcısı kullanılabilir.

Daha fazla bilgi için, bkz. ASP.NET Core'de bağımlılık ekleme.

Ara yazılım

İstek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak oluşturulur. Her bileşen bir HttpContext üzerinde işlemler gerçekleştirir ve ya işlem hattındaki sonraki ara yazılımı çağırır ya da isteği sonlandırır.

Kural gereği, Startup.Configure yöntemi içinde bir Use... genişletme yöntemi çağrılarak işlem hattına bir ara yazılım bileşeni eklenir. Örneğin, statik dosyaların işlenmesini etkinleştirmek için UseStaticFiles çağrısında bulunur.

Aşağıdaki örnek, bir istek işleme işlem hattını yapılandırır:

public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

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

ASP.NET Core zengin bir yerleşik ara yazılım kümesi içerir. Özel ara yazılım bileşenleri de yazılabilir.

Daha fazla bilgi için, bkz. ASP.NET Core Ara Yazılımı.

Ana Bilgisayar

Başlangıçta, bir ASP.NET Core uygulaması bir ana bilgisayar oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:

  • Bir HTTP sunucusu uygulaması
  • Ara yazılım bileşenleri
  • Günlük Kaydı
  • Bağımlılık ekleme (DI) hizmetleri
  • Yapılandırma

İki farklı ana bilgisayar vardır:

  • Genel Ana Bilgisayar
  • ASP.NET Core Web Ana Bilgisayarı

.NET Genel Ana Bilgisayarı önerilir. ASP.NET Core Web Ana Bilgisayarı yalnızca geriye dönük uyumluluk için kullanılabilir.

Aşağıdaki örnek bir .NET Genel Ana Bilgisayarı oluşturur:

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>();
            });
}

CreateDefaultBuilder ve ConfigureWebHostDefaults yöntemleri, bir ana bilgisayarı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırır:

  • Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
  • appsettings.json, appsettings.{Environment}.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yapılandırma yükleme.
  • Günlüğe kaydetme çıkışını konsola gönderin ve sağlayıcılarda hata ayıklayın.

Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.

Web dışı senaryolar

Genel Ana Bilgisayar, diğer uygulama türlerinin günlüğe kaydetme, bağımlılık ekleme (DI), yapılandırma ve uygulama yaşam süresi yönetimi gibi çapraz kesme çerçevesi uzantılarını kullanmasına olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'de .NET Genel Ana Bilgisayarı ve ASP.NET Core'da barındırılan hizmetlerle arka plan görevleri.

Sunucular

ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, uygulamaya yönelik istekleri bir HttpContext içinde oluşturulan bir istek özellikleri kümesi olarak gösterir.

ASP.NET Core aşağıdaki sunucu uygulamalarını sağlar:

  • Kestrel platformlar arası bir web sunucusudur. Kestrel genellikle IIS kullanılarak ters ara sunucu yapılandırmasında çalıştırılır. ASP.NET Core 2.0 veya sonraki sürümlerinde, Kestrel doğrudan İnternet'e açık genel kullanıma yönelik bir uç sunucu olarak çalıştırılabilir.
  • IIS HTTP Sunucusu, Windows için IIS kullanan bir sunucudur. Bu sunucuyla, ASP.NET Core uygulaması ve IIS aynı işlemde çalışır.
  • HTTP.sys, WINDOWS için IIS ile kullanılmayan bir sunucudur.

Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.

Yapılandırma

ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcıları kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.

Varsayılan olarak, ASP.NET Core uygulamaları, appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.

İlgili yapılandırma değerlerini okumanın tercih edilen yolu seçenekler desenini kullanmaktır. Daha fazla bilgi için, bkz. Seçenekler desenini kullanarak hiyerarşik yapılandırma verilerini bağlama.

.NET Core, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi sağlar. Üretim gizli dizileri için Azure Key Vault öneririz.

Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.

Ortamlar

Development, Staging ve Production gibi yürütme ortamları ASP.NET Core'da birinci sınıf bir kavramdır. ASPNETCORE_ENVIRONMENT ortam değişkenini ayarlayarak bir uygulamanın çalıştığı ortamı belirtin. ASP.NET Core bu ortam değişkenini uygulama başlangıcında okur ve değeri bir IWebHostEnvironment uygulamasında depolar. Bu uygulama, bağımlılık ekleme (DI) aracılığıyla bir uygulamanın herhangi bir yerinde kullanılabilir.

Aşağıdaki örnek, uygulamayı Development ortamında çalışırken ayrıntılı hata bilgileri sağlayacak şekilde yapılandırılır:

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

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

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

Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Günlük Kaydı

ASP.NET Core, çeşitli yerleşik ve üçüncü taraf günlük sağlayıcılarıyla çalışan bir günlük API'sini destekler. Kullanılabilir sağlayıcılar şunlardır:

  • Konsol
  • Hata Ayıklama
  • Windows'da Olay İzleme
  • Windows Olay Günlükleri
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Günlükler oluşturmak için, bağımlılık eklemeden (DI) bir ILogger<TCategoryName> hizmetini çözümleyin ve LogInformation gibi günlüğe kaydetme yöntemlerini çağırın. Örneğin:

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        
        // Item lookup code removed.
        
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        
        return item;
    }
}

LogInformation gibi günlüğe kaydetme yöntemleri herhangi bir sayıda alanı destekler. Bu alanlar genellikle bir ileti string oluşturmak için kullanılır, ancak bazı günlük sağlayıcıları bunları ayrı alanlar olarak bir veri deposuna gönderir. Bu özellik, günlüğe kaydetme sağlayıcılarının yapılandırılmış günlük olarak da bilinen anlamsal günlüğe kaydetme gerçekleştirmesini mümkün kılar.

Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.

Yönlendirme

Yol, bir işleyiciye eşlenen bir URL desenidir. İşleyici genellikle bir Razor sayfası, MVC denetleyicisindeki bir eylem yöntemi veya ara yazılımdır. ASP.NET Core yönlendirme, uygulamanız tarafından kullanılan URL'ler üzerinde denetim sağlar.

Daha fazla bilgi için, bkz. ASP.NET Core’da Yönlendirme.

Hata işleme

ASP.NET Core, hataları işlemek için, şunlar gibi yerleşik özelliklere sahiptir:

  • Geliştirici özel durum sayfası
  • Özel hata sayfaları
  • Statik durum kodu sayfaları
  • Özel durum işlemeyi başlatma

Daha fazla bilgi için, bkz. ASP.NET Core’da hataları işleme.

HTTP istekleri oluşturma

Bir IHttpClientFactory uygulaması HttpClient örnekleri oluşturmak için kullanılabilir. Üreteç:

  • Mantıksal HttpClient örneklerini adlandırmak ve yapılandırmak için merkezi bir konum sağlar. Örneğin, GitHub’a erişmek için bir github istemcisi kaydedin ve yapılandırın. Diğer amaçlar için varsayılan istemciyi kaydedin ve yapılandırın.
  • Giden istek ara yazılım işlem hattı oluşturmak için, birden çok temsilci atama işleyicisinin kaydını ve zincirini destekler. Bu düzen, ASP.NET Core’un gelen ara yazılım işlem hattına benzer. Desen, önbelleğe alma, hata işleme, serileştirme ve günlüğe kaydetme dahil olmak üzere HTTP isteklerine yönelik kesme sorunlarını yönetmek için bir mekanizma sağlar.
  • Geçici hata işleme için popüler bir üçüncü taraf kitaplığı olan Polly ile tümleşir.
  • HttpClient yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınan HttpClientHandler örneklerinin havuza alınmasını ve yaşam süresini yönetir.
  • Fabrika tarafından oluşturulan istemciler aracılığıyla gönderilen tüm istekler için ILogger aracılığıyla yapılandırılabilir bir günlüğe kaydetme deneyimi ekler.

Daha fazla bilgi için, bkz. ASP.NET Core'da IHttpClientFactory kullanarak HTTP isteği yapma.

İçerik kökü

İçerik kökü, aşağıdakiler için temel yoldur:

  • Uygulamayı barındıran yürütülebilir dosya (.exe).
  • Uygulamayı oluşturan derlenmiş bütünleştirilmiş kodlar (.dll).
  • Uygulama tarafından kullanılan içerik dosyaları, örneğin:
    • Razor dosyaları (.cshtml, .razor)
    • Yapılandırma dosyaları (.json, .xml)
    • Veri dosyaları (.db)
  • Web kökü, genellikle wwwroot klasörü.

Geliştirme sırasında içerik kökü varsayılan olarak projenin kök dizinine ayarlanır. Bu dizin aynı zamanda hem uygulamanın içerik dosyaları hem de Web kökü için temel yoldur. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir içerik kökü belirtin. Daha fazla bilgi içi,n bkz. İçerik kökü.

Web kökü

Web kökü, aşağıdakiler gibi genel, statik kaynak dosyalarının temel yoludur:

  • Stil Sayfaları (.css)
  • JavaScript (.js)
  • Görüntüler (.png, .jpg)

Varsayılan olarak, statik dosyalar yalnızca web kök dizininden ve alt dizinlerinden sunulur. Web kökü yolu varsayılan olarak {content root}/wwwroot şeklinde ayarlanır. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için, bkz. Web kökü.

Proje dosyasındaki <İçerik ve proje öğesiyle dosyaların wwwroot'ta yayınlanmasını engelleyin. Aşağıdaki örnek, wwwroot/local dizininde ve alt dizinlerinde içerik yayımlamayı engeller:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Razor.cshtml dosyalarında, tilde-slash (~/) web kökünü gösterir. ~/ ile başlayan bir yol, sanal yol olarak adlandırılır.

Daha fazla bilgi için, bkz. ASP.NET Core statik dosyaları.

Bu makalede, bağımlılık ekleme (DI), yapılandırma, ara yazılım ve daha fazlası dahil olmak üzere ASP.NET Core uygulamaları oluşturmaya yönelik temellere bir genel bakış sunulmaktadır.

Blazor Bu düğümdeki yönergeleri ekleyen veya yerine geçen temel bilgiler için bkz. temel ASP.NET Blazor temel bilgiler.

Program.cs

Web şablonlarıyla oluşturulan ASP.NET Core uygulamaları, Program.cs dosyasındaki uygulama başlangıç kodunu içerir. Program.cs dosyası şu durumda:

  • Uygulamanın gerektirdiği hizmetler yapılandırılır.
  • Uygulamanın istek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak tanımlanır.

Aşağıdaki uygulama başlangıç kodu aşağıdakileri destekler:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Bağımlılık ekleme (hizmetler)

ASP.NET Core, yapılandırılmış hizmetleri uygulama genelinde kullanılabilir hale getiren bağımlılık ekleme (DI) içerir. Hizmetler, builder.Services önceki kodda WebApplicationBuilder.Services ile DI kapsayıcısına eklenir. WebApplicationBuilder örneği oluşturulurken, birçok çerçeve tarafından sağlanan hizmet eklenir. builder aşağıdaki kodda bir WebApplicationBuilder öğesidir:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

Yukarıdaki vurgulanan kodda, builder DI kapsayıcısına eklenen yapılandırma, günlük ve diğer birçok hizmet bulunur.

Aşağıdaki kod Razor Sayfaları, görünümlere sahip MVC denetleyicileri ve DI kapsayıcısına bir özel DbContext ekler:

using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));

var app = builder.Build();

Hizmetler genellikle oluşturucu eklemesi kullanılarak DI'den çözümlenir. DI çerçevesi, çalışma zamanında bu hizmetin bir örneğini sağlar.

Aşağıdaki kod, DI'den veritabanı bağlamını ve günlükçüleri çözümlemek için oluşturucu eklemesini kullanır:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Ara yazılım

İstek işleme işlem hattı, bir dizi ara yazılım bileşeni olarak oluşturulur. Her bileşen bir HttpContext üzerinde işlemler gerçekleştirir ve ya işlem hattındaki sonraki ara yazılımı çağırır ya da isteği sonlandırır.

Kural gereği, bir Use{Feature} uzantı yöntemi çağrılarak işlem hattına bir ara yazılım bileşeni eklenir. Uygulamaya eklenen ara yazılım aşağıdaki kodda vurgulanır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core Ara Yazılımı.

Ana Bilgisayar

Başlangıçta, bir ASP.NET Core uygulaması bir ana bilgisayar oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:

  • Bir HTTP sunucusu uygulaması
  • Ara yazılım bileşenleri
  • Günlük Kaydı
  • Bağımlılık ekleme (DI) hizmetleri
  • Yapılandırma

ASP.NET Core uygulamasını çalıştırabilen üç farklı konak vardır:

ASP.NET Core WebApplication ve WebApplicationBuilder türleri tüm ASP.NET Core şablonlarında önerilir ve kullanılır. WebApplication .NET Genel Konağına benzer şekilde davranır ve aynı arabirimlerin çoğunu kullanıma sunar, ancak yapılandırmak için daha az geri çağırma gerektirir. ASP.NET Core WebHost yalnızca geriye dönük uyumluluk için kullanılabilir.

Aşağıdaki örnek bir WebApplicationörneği oluşturur:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

WebApplicationBuilder.Build yöntemi, bir ana bilgisayarı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırır:

  • Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
  • appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yapılandırma yükleme.
  • Günlüğe kaydetme çıkışını konsola gönderin ve sağlayıcılarda hata ayıklayın.

Web dışı senaryolar

Genel Ana Bilgisayar, diğer uygulama türlerinin günlüğe kaydetme, bağımlılık ekleme (DI), yapılandırma ve uygulama yaşam süresi yönetimi gibi çapraz kesme çerçevesi uzantılarını kullanmasına olanak tanır. Daha fazla bilgi için, bkz. ASP.NET Core'de .NET Genel Ana Bilgisayarı ve ASP.NET Core'da barındırılan hizmetlerle arka plan görevleri.

Sunucular

ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, uygulamaya yönelik istekleri bir HttpContext içinde oluşturulan bir istek özellikleri kümesi olarak gösterir.

ASP.NET Core aşağıdaki sunucu uygulamalarını sağlar:

  • Kestrel platformlar arası bir web sunucusudur. Kestrel genellikle IIS kullanılarak ters ara sunucu yapılandırmasında çalıştırılır. ASP.NET Core 2.0 veya sonraki sürümlerinde, Kestrel doğrudan İnternet'e açık genel kullanıma yönelik bir uç sunucu olarak çalıştırılabilir.
  • IIS HTTP Sunucusu, Windows için IIS kullanan bir sunucudur. Bu sunucuyla, ASP.NET Core uygulaması ve IIS aynı işlemde çalışır.
  • HTTP.sys, WINDOWS için IIS ile kullanılmayan bir sunucudur.

Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.

Yapılandırma

ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcıları kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.

Varsayılan olarak, ASP.NET Core uygulamaları, appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.

.NET Core, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi sağlar. Üretim gizli dizileri için Azure Key Vault öneririz.

Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.

Ortamlar

Development, Staging ve Production gibi yürütme ortamları ASP.NET Core'da kullanılabilir. ASPNETCORE_ENVIRONMENT ortam değişkenini ayarlayarak bir uygulamanın çalıştığı ortamı belirtin. ASP.NET Core bu ortam değişkenini uygulama başlangıcında okur ve değeri bir IWebHostEnvironment uygulamasında depolar. Bu uygulama, bağımlılık ekleme (DI) aracılığıyla bir uygulamanın herhangi bir yerinde kullanılabilir.

Aşağıdaki örnek, Development ortamında çalışmadığında özel durum işleyicisini ve HTTP Katı Aktarım Güvenlik Protokolü (HSTS) ara yazılımını yapılandırır:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

Günlük Kaydı

ASP.NET Core, çeşitli yerleşik ve üçüncü taraf günlük sağlayıcılarıyla çalışan bir günlük API'sini destekler. Kullanılabilir sağlayıcılar şunlardır:

  • Konsol
  • Hata Ayıklama
  • Windows'da Olay İzleme
  • Windows Olay Günlükleri
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Günlükler oluşturmak için, bağımlılık eklemeden (DI) bir ILogger<TCategoryName> hizmetini çözümleyin ve LogInformation gibi günlüğe kaydetme yöntemlerini çağırın. Örneğin:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.

Yönlendirme

Yol, bir işleyiciye eşlenen bir URL desenidir. İşleyici genellikle bir Razor sayfası, MVC denetleyicisindeki bir eylem yöntemi veya ara yazılımdır. ASP.NET Core yönlendirme, uygulamanız tarafından kullanılan URL'ler üzerinde denetim sağlar.

ASP.NET Core web uygulaması şablonu tarafından oluşturulan aşağıdaki kod UseRouting çağırır:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core’da Yönlendirme.

Hata işleme

ASP.NET Core, hataları işlemek için, şunlar gibi yerleşik özelliklere sahiptir:

  • Geliştirici özel durum sayfası
  • Özel hata sayfaları
  • Statik durum kodu sayfaları
  • Özel durum işlemeyi başlatma

Daha fazla bilgi için, bkz. ASP.NET Core’da hataları işleme.

HTTP istekleri oluşturma

Bir IHttpClientFactory uygulaması HttpClient örnekleri oluşturmak için kullanılabilir. Üreteç:

  • Mantıksal HttpClient örneklerini adlandırmak ve yapılandırmak için merkezi bir konum sağlar. Örneğin, GitHub’a erişmek için bir github istemcisi kaydedin ve yapılandırın. Diğer amaçlar için varsayılan istemciyi kaydedin ve yapılandırın.
  • Giden istek ara yazılım işlem hattı oluşturmak için, birden çok temsilci atama işleyicisinin kaydını ve zincirini destekler. Bu düzen, ASP.NET Core’un gelen ara yazılım işlem hattına benzer. Desen, önbelleğe alma, hata işleme, serileştirme ve günlüğe kaydetme dahil olmak üzere HTTP isteklerine yönelik kesme sorunlarını yönetmek için bir mekanizma sağlar.
  • Geçici hata işleme için popüler bir üçüncü taraf kitaplığı olan Polly ile tümleşir.
  • HttpClient yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınan HttpClientHandler örneklerinin havuza alınmasını ve yaşam süresini yönetir.
  • Fabrika tarafından oluşturulan istemciler aracılığıyla gönderilen tüm istekler için ILogger aracılığıyla yapılandırılabilir bir günlüğe kaydetme deneyimi ekler.

Daha fazla bilgi için, bkz. ASP.NET Core'da IHttpClientFactory kullanarak HTTP isteği yapma.

İçerik kökü

İçerik kökü, aşağıdakiler için temel yoldur:

  • Uygulamayı barındıran yürütülebilir dosya (.exe).
  • Uygulamayı oluşturan derlenmiş bütünleştirilmiş kodlar (.dll).
  • Uygulama tarafından kullanılan içerik dosyaları, örneğin:
    • Razor dosyaları (.cshtml, .razor)
    • Yapılandırma dosyaları (.json, .xml)
    • Veri dosyaları (.db)
  • Web kökü, genellikle wwwroot klasörü.

Geliştirme sırasında içerik kökü varsayılan olarak projenin kök dizinine ayarlanır. Bu dizin aynı zamanda hem uygulamanın içerik dosyaları hem de Web kökü için temel yoldur. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir içerik kökü belirtin. Daha fazla bilgi içi,n bkz. İçerik kökü.

Web kökü

Web kökü, aşağıdakiler gibi genel, statik kaynak dosyalarının temel yoludur:

  • Stil Sayfaları (.css)
  • JavaScript (.js)
  • Görüntüler (.png, .jpg)

Varsayılan olarak, statik dosyalar yalnızca web kök dizininden ve alt dizinlerinden sunulur. Web kökü yolu varsayılan olarak {content root}/wwwroot şeklinde ayarlanır. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için, bkz. Web kökü.

Proje dosyasındaki <İçerik ve proje öğesiyle dosyaların wwwroot'ta yayınlanmasını engelleyin. Aşağıdaki örnek, wwwroot/local dizininde ve alt dizinlerinde içerik yayımlamayı engeller:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Razor.cshtml dosyalarında ~/, web kökünü gösterir. ~/ ile başlayan bir yol, sanal yol olarak adlandırılır.

Daha fazla bilgi için, bkz. ASP.NET Core statik dosyaları.

Ek kaynaklar