ASP.NET Core temellerine genel bakış
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.
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:
- Razor Sayfaları
- Görünümlere sahip MVC denetleyicileri
- Denetleyicilerle web API'si
- Minimal web API'leri
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 Temel WebUygulama, En Az Ana Bilgisayar olarak da bilinir
- .NET Genel Konağı , ASP.NET Core'un ConfigureWebHostDefaults
- ASP.NET Core WebHost
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.json
ortam 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ınanHttpClientHandler
ö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
)
- Razor dosyaları (
- 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:
- Razor Sayfaları
- Görünümlere sahip MVC denetleyicileri
- Denetleyicilerle web API'si
- Minimal web API'leri
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 Temel WebUygulama, En Az Ana Bilgisayar olarak da bilinir
- .NET Genel Konağı , ASP.NET Core'un ConfigureWebHostDefaults
- ASP.NET Core WebHost
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.json
ortam 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ınanHttpClientHandler
ö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
)
- Razor dosyaları (
- 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.json
ortam 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ınanHttpClientHandler
ö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
)
- Razor dosyaları (
- 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:
- Razor Sayfaları
- Görünümlere sahip MVC denetleyicileri
- Denetleyicilerle web API'si
- Minimal web API'leri
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 Temel WebUygulama, En Az Ana Bilgisayar olarak da bilinir
- .NET Genel Konağı , ASP.NET Core'un ConfigureWebHostDefaults
- ASP.NET Core WebHost
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.json
ortam 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ınanHttpClientHandler
ö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
)
- Razor dosyaları (
- 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
ASP.NET Core