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 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.
Bu makaledeki yönergeleri ekleyen veya yerine geçen Blazor temel bilgiler için bkz. ASP.NET Core Blazor temelleri.
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 çeşitli uygulama türlerini destekler:
- Blazor Web Apps
- Razor Sayfaları
- Görünümlere sahip MVC denetleyicileri
- Denetleyicilerle web API'si
- Minimal web API'leri
using WebAll.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
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.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.UseAntiforgery();
app.Run();
Bağımlılık ekleme (hizmetler)
ASP.NET Core, yapılandırılmış hizmetleri bir uygulama genelinde kullanılabilir hale getiren yerleşik bağımlılık ekleme (DI) özellikleri. Hizmetler, önceki kodda builder.Services
ile DI kapsayıcısına 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();
Önceki kodda
Aşağıdaki kod, DI kapsayıcısına özel bir DbContext ve Blazor bileşenleri ekler:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContextFactory<BlazorWebAppMoviesContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MoviesContext")
?? throw new InvalidOperationException("Connection string not found.")));
builder.Services.AddQuickGridEntityFrameworkAdapter();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
var app = builder.Build();
Blazor Web App'lerde hizmetler genellikle aşağıdaki örnekte gösterildiği gibi bir Razor bileşeninde @inject
yönergesi kullanılarak çalışma zamanında DI'den çözümlenir:
@page "/movies"
@rendermode InteractiveServer
@using Microsoft.EntityFrameworkCore
@using Microsoft.AspNetCore.Components.QuickGrid
@using BlazorWebAppMovies.Models
@using BlazorWebAppMovies.Data
@implements IAsyncDisposable
@inject IDbContextFactory<BlazorWebAppMovies.Data.BlazorWebAppMoviesContext> DbFactory
<PageTitle>Index</PageTitle>
<h1>Index</h1>
<div>
<input type="search" @bind="titleFilter" @bind:event="oninput" />
</div>
<p>
<a href="movies/create">Create New</a>
</p>
<QuickGrid Class="table" Items="FilteredMovies" Pagination="pagination">
<PropertyColumn Property="movie => movie.Title" Sortable="true" />
<PropertyColumn Property="movie => movie.ReleaseDate" Title="Release Date" />
<PropertyColumn Property="movie => movie.Genre" />
<PropertyColumn Property="movie => movie.Price" />
<PropertyColumn Property="movie => movie.Rating" />
<TemplateColumn Context="movie">
<a href="@($"movies/edit?id={movie.Id}")">Edit</a> |
<a href="@($"movies/details?id={movie.Id}")">Details</a> |
<a href="@($"movies/delete?id={movie.Id}")">Delete</a>
</TemplateColumn>
</QuickGrid>
<Paginator State="pagination" />
@code {
private BlazorWebAppMoviesContext context = default!;
private PaginationState pagination = new PaginationState { ItemsPerPage = 10 };
private string titleFilter = string.Empty;
private IQueryable<Movie> FilteredMovies =>
context.Movie.Where(m => m.Title!.Contains(titleFilter));
protected override void OnInitialized()
{
context = DbFactory.CreateDbContext();
}
public async ValueTask DisposeAsync() => await context.DisposeAsync();
}
Yukarıdaki kodda:
-
@inject
yönergesi kullanılır. - Hizmet
OnInitialized
yönteminde çözümlenir vecontext
değişkenine atanır. -
context
hizmetiFilteredMovie
listesini oluşturur.
DI'den bir hizmeti çözümlemenin bir diğer yolu da oluşturucu ekleme kullanmaktır. Aşağıdaki Razor Pages kodu, veritabanı bağlamını ve DI'den bir günlükçüyü çözmek için oluşturucu enjeksiyonunu 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();
}
}
Yukarıdaki kodda, IndexModel
oluşturucu, çalışma zamanında _context
değişkenine çözümlenen RazorPagesMovieContext
türünde bir parametre alır. bağlam nesnesi, OnGetAsync
yönteminde film listesi oluşturmak için kullanılır.
Daha fazla bilgi için bkz. ASP.NET Core Blazor bağımlılık enjeksiyonu ve ASP.NET Core'da Bağımlılık Enjeksiyonu.
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. Bir uygulamaya ara yazılım eklemek için Use{Feature}
adlı yöntemlerin kullanımı aşağıdaki kodda gösterilmiştir:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContextFactory<BlazorWebAppMoviesContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MoviesContext")
?? throw new InvalidOperationException("Connection string not found.")));
builder.Services.AddQuickGridEntityFrameworkAdapter();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
app.UseMigrationsEndPoint();
}
app.UseHttpsRedirection();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
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 önerilir ve tüm ASP.NET Core şablonlarında 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 ve app
adlı bir değişkene atar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContextFactory<BlazorWebAppMoviesContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MoviesContext")
?? throw new InvalidOperationException("Connection string not found.")));
builder.Services.AddQuickGridEntityFrameworkAdapter();
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
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.
-
, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından
appsettings.json
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 enjeksiyonu (DI), yapılandırma ve uygulama yaşam döngüsü yönetimi gibi çapraz kesme çerçeve eklentilerini kullanmasını sağlar. 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 içinde oluşturulan bir HttpContext 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 ve sonraki sürümlerinde, Kestrel doğrudan İnternet'e sunulan 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, geliştirme ortamında parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisisağ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, ortamında çalışmadığında özel durum işleyicisini ve Development
ara yazılımını yapılandırır:
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
app.UseHsts();
app.UseMigrationsEndPoint();
}
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. Aşağıdaki örnek, Blazor Web Appbir sayfadaki bir .razor
dosyasında kayıt tutucu nasıl alınır ve kullanılır, bunu göstermektedir.
CreateBuilder yöntemi Program.cs
içinde çağrıldığında bir günlükçü nesnesi ve bunun için bir konsol sağlayıcısı DI kapsayıcısında otomatik olarak depolanır.
@page "/weather"
@attribute [StreamRendering]
@inject ILogger<Weather> Logger
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data and logging.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th aria-label="Temperature in Celsius">Temp. (C)</th>
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? forecasts;
protected override async Task OnInitializedAsync()
{
// Simulate asynchronous loading to demonstrate streaming rendering
await Task.Delay(500);
Logger.LogInformation("This is an information log message.");
Logger.LogWarning("This is a warning log message.");
Logger.LogError("This is an error log message.");
var startDate = DateOnly.FromDateTime(DateTime.Now);
var summaries = new[] { "Freezing", "Bracing", "Chilly",
"Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
}).ToArray();
}
private class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
}
Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.
Yönlendirme
ASP.NET Core'da yönlendirme, gelen istekleri bir uygulamadaki belirli uç noktalara eşleyen bir mekanizmadır. Blazor bileşenleri, Razor sayfaları, MVC denetleyici eylemleri veya ara yazılım gibi farklı bileşenlere karşılık gelen URL desenleri tanımlamanızı sağlar.
UseRouting(IApplicationBuilder) yöntemi, yönlendirme ara yazılımını istek işlem hattına ekler. Bu ara yazılım yönlendirme bilgilerini işler ve her istek için uygun uç noktayı belirler. Ara yazılımların işlenme sırasını değiştirmek istemediğiniz sürece UseRouting
açıkça çağırmanız gerekmez.
Daha fazla bilgi için bkz. ASP.NET Core
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.
-
HttpClientHandler yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınan
HttpClient
ö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 < dosyaların >'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, önceki kodda builder.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.
-
, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından
appsettings.json
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 içinde oluşturulan bir HttpContext
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, ortamında çalışmadığında özel durum işleyicisini ve Development
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.
-
HttpClientHandler
yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınanHttpClient
ö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 < dosyaların >'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, Use...
yöntemi içinde bir Startup.Configure
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 içinde oluşturulan bir HttpContext
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.
-
HttpClientHandler
yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınanHttpClient
ö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 < dosyaların >'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, önceki kodda builder.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.
-
, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından
appsettings.json
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 içinde oluşturulan bir HttpContext
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, ortamında çalışmadığında özel durum işleyicisini ve Development
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.
-
HttpClientHandler
yaşam sürelerini el ile yönetirken ortaya çıkan yaygın DNS sorunlarından kaçınmak için, temel alınanHttpClient
ö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 < dosyaların >'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