Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Note
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
Warning
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 10 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 WebApplicationBuilder.Servicesbuilder.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 @inject bileşeninde Razor 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:
-
@injectyönergesi kullanılır. - Hizmet
OnInitializedyönteminde çözümlenir vecontextdeğişkenine atanır. -
contexthizmetiFilteredMovielistesini 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 RazorPagesMovieContext değişkenine çözümlenen _contexttü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.
Middleware
İ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ı.
Host
Başlangıçta, bir ASP.NET Core uygulaması bir host oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:
- Bir HTTP sunucusu uygulaması
- Ara yazılım bileşenleri
- Logging
- Bağımlılık ekleme (DI) hizmetleri
- Configuration
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 appadlı 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 konağı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırıyor:
- Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
- Yapılandırmayı konfigürasyon,
appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yükleyin. - 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.
Servers
ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, istekleri bir içinde oluşturulan istek HttpContext kümesi olarak uygulamaya sunar.
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 , IIS ile kullanılmayan bir Windows sunucusudur.
Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.
Configuration
ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcısı kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.
Varsayılan olarak, ASP.NET Core uygulamaları , appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.
.NET, geliştirme ortamında parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi'ni 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.
Environments
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 çalışma zamanı ortamları.
Logging
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:
- Console
- Debug
- 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, .razorbir sayfadaki bir Blazor Web App dosyasında kayıt tutucu nasıl alınır ve kullanılır, bunu göstermektedir.
CreateBuilder yöntemi Program.csiç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 ve ASP.NET Core'da oturum açma.
Routing
ASP.NET Core'da yönlendirme, gelen istekleri bir uygulamadaki belirli uç noktalara eşleyen bir mekanizmadır. Razor 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 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'da yönlendirme ve ASP.NET Core Blazor yönlendirme.
Hata yönetimi
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ş derlemeler (.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
wwwrootdizinidir.
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çin 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}/wwwrootkullanılır; burada {CONTENT ROOT} yer tutucu, içerik köküdü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 wwwroot<Content> proje öğesiyle içinde dosya yayımlamayı önleyin. Aşağıdaki örnek, wwwroot/local 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ı.
Örnek indirme
Çoğu makale ve öğretici örnek koda bağlantılar içerir.
- ASP.NET deposu zip dosyasını indirin.
- Dosyanın sıkıştırmasını açın
AspNetCore.Docs-main.zip. - Bir makalenin sıkıştırması açılmış depodaki örnek uygulamasına erişmek için makalenin örnek bağlantısındaki URL'yi kullanarak örneğin klasörüne gitmenize yardımcı olun. Genellikle makalenin örnek bağlantısı makalenin üst kısmında Örnek kodu görüntüle veya indir bağlantı metniyle gösterilir.
Örnek kodda ön işlemci yönergeleri
Birden çok senaryoyu göstermek için örnek uygulamalar, örnek kodun #define farklı bölümlerini seçmeli olarak derlemek ve çalıştırmak için ve #if-#else/#elif-#endif önişlemci yönergelerini kullanır. Bu yaklaşımı kullanan örnekler için, çalıştırmak istediğiniz senaryoyla ilişkili simgeyi tanımlamak için C# dosyalarının en üstündeki yönergesini ayarlayın #define . Bazı örneklerin bir senaryoyu çalıştırmak için birden çok dosya üst kısmında sembol tanımlaması gerekir.
Örneğin, aşağıdaki simge listesi #define dört senaryonun kullanılabilir olduğunu gösterir (her simge için bir senaryo). Geçerli örnek yapılandırması TemplateCode senaryosunu çalıştırır:
#define TemplateCode // or LogFromMain or ExpandDefault or FilterInCode
Örneği ExpandDefault senaryosunu çalıştıracak şekilde değiştirmek için ExpandDefault simgesini tanımlayın ve kalan simgeleri açıklama satırı yapılmış şekilde bırakın:
#define ExpandDefault // TemplateCode or LogFromMain or FilterInCode
Kod bölümlerini seçmeli olarak derlemek için C# önişlemci yönergelerini kullanma hakkında daha fazla bilgi için bkz. #define (C# Başvurusu) ve #if (C# Başvurusu).
Örnek koddaki bölgeler
Bazı örnek uygulamalar , #region ve #endregion C# yönergeleriyle çevrili kod bölümleri içerir. Belge derleme sistemi, bu bölgeleri işlenen belge konularına ekler.
Bölge adları genellikle "kod parçacığı" sözcüğünü içerir. Aşağıdaki örnekte adlı snippet_WebHostDefaultsbir bölge gösterilmektedir:
#region snippet_WebHostDefaults
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
#endregion
Yukarıdaki C# kod parçacığına, konunun markdown dosyasında aşağıdaki satırla başvurulur:
[!code-csharp[](sample/SampleApp/Program.cs?name=snippet_WebHostDefaults)]
Kodu çevreleyen #region ve #endregion yönergelerini güvenle görmezden gelebilir veya kaldırabilirsiniz. Konu başlığında açıklanan örnek senaryoları çalıştırmayı planlıyorsanız, bu yönergelerin içindeki kodu değiştirmeyin.
Daha fazla bilgi için bkz. ASP.NET belgelerine katkıda bulunma: Kod parçacıkları.
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 WebApplicationBuilder.Servicesbuilder.Services ile DI kapsayıcısına eklenir. Örnek WebApplicationBuilder oluşturulduğunda, 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();
}
}
Middleware
İ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ı.
Host
Başlangıçta, bir ASP.NET Core uygulaması bir host oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:
- Bir HTTP sunucusu uygulaması
- Ara yazılım bileşenleri
- Logging
- Bağımlılık ekleme (DI) hizmetleri
- Configuration
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 konağı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırıyor:
- Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
- Yapılandırmayı konfigürasyon,
appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yükleyin. - 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.
Servers
ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, istekleri bir içinde oluşturulan istek HttpContext kümesi olarak uygulamaya sunar.
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 , IIS ile kullanılmayan bir Windows sunucusudur.
Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.
Configuration
ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcısı kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.
Varsayılan olarak, ASP.NET Core uygulamaları , appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.
.NET, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi'ni 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.
Environments
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 çalışma zamanı ortamları.
Logging
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:
- Console
- Debug
- 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 ve ASP.NET Core'da oturum açma.
Routing
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 yönetimi
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.
-
HttpClientHandleryaş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ş derlemeler (.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çin 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 şeklindedir. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için bkz. Web kökü.
Proje dosyasında < dosya yayımlamayı 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ı.
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ırma (veya kaydetme) kodu ilgili Startup.ConfigureServices yönteme 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.
Middleware
İ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ı.
Host
Başlangıçta, bir ASP.NET Core uygulaması bir host oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:
- Bir HTTP sunucusu uygulaması
- Ara yazılım bileşenleri
- Logging
- Bağımlılık ekleme (DI) hizmetleri
- Configuration
İ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.
Servers
ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, istekleri bir içinde oluşturulan istek HttpContext kümesi olarak uygulamaya sunar.
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 , IIS ile kullanılmayan bir Windows sunucusudur.
Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.
Configuration
ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcıları kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.
Varsayılan olarak, ASP.NET Core uygulamaları , appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.
İlgili yapılandırma değerlerini okumanın tercih edilen yolu , seçenekler desenini kullanmaktır. Daha fazla bilgi için, bkz. Seçenekler desenini kullanarak hiyerarşik yapılandırma verilerini bağlama.
.NET, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi'ni 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.
Environments
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 çalışma zamanı ortamları.
Logging
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:
- Console
- Debug
- 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 ve ASP.NET Core'da oturum açma.
Routing
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 yönetimi
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.
-
HttpClientHandleryaş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ş derlemeler (.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çin 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 şeklindedir. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için bkz. Web kökü.
Proje dosyasında < dosya yayımlamayı 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ı.
Örnek indirme
Çoğu makale ve öğretici örnek koda bağlantılar içerir.
- ASP.NET deposu zip dosyasını indirin.
- Dosyanın sıkıştırmasını açın
AspNetCore.Docs-main.zip. - Bir makalenin sıkıştırması açılmış depodaki örnek uygulamasına erişmek için makalenin örnek bağlantısındaki URL'yi kullanarak örneğin klasörüne gitmenize yardımcı olun. Genellikle makalenin örnek bağlantısı makalenin üst kısmında Örnek kodu görüntüle veya indir bağlantı metniyle gösterilir.
Örnek kodda ön işlemci yönergeleri
Birden çok senaryoyu göstermek için örnek uygulamalar, örnek kodun #define farklı bölümlerini seçmeli olarak derlemek ve çalıştırmak için ve #if-#else/#elif-#endif önişlemci yönergelerini kullanır. Bu yaklaşımı kullanan örnekler için, çalıştırmak istediğiniz senaryoyla ilişkili simgeyi tanımlamak için C# dosyalarının en üstündeki yönergesini ayarlayın #define . Bazı örneklerin bir senaryoyu çalıştırmak için birden çok dosya üst kısmında sembol tanımlaması gerekir.
Örneğin, aşağıdaki simge listesi #define dört senaryonun kullanılabilir olduğunu gösterir (her simge için bir senaryo). Geçerli örnek yapılandırması TemplateCode senaryosunu çalıştırır:
#define TemplateCode // or LogFromMain or ExpandDefault or FilterInCode
Örneği ExpandDefault senaryosunu çalıştıracak şekilde değiştirmek için ExpandDefault simgesini tanımlayın ve kalan simgeleri açıklama satırı yapılmış şekilde bırakın:
#define ExpandDefault // TemplateCode or LogFromMain or FilterInCode
Kod bölümlerini seçmeli olarak derlemek için C# önişlemci yönergelerini kullanma hakkında daha fazla bilgi için bkz. #define (C# Başvurusu) ve #if (C# Başvurusu).
Örnek koddaki bölgeler
Bazı örnek uygulamalar , #region ve #endregion C# yönergeleriyle çevrili kod bölümleri içerir. Belge derleme sistemi, bu bölgeleri işlenen belge konularına ekler.
Bölge adları genellikle "kod parçacığı" sözcüğünü içerir. Aşağıdaki örnekte adlı snippet_WebHostDefaultsbir bölge gösterilmektedir:
#region snippet_WebHostDefaults
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
#endregion
Yukarıdaki C# kod parçacığına, konunun markdown dosyasında aşağıdaki satırla başvurulur:
[!code-csharp[](sample/SampleApp/Program.cs?name=snippet_WebHostDefaults)]
Kodu çevreleyen #region ve #endregion yönergelerini güvenle görmezden gelebilir veya kaldırabilirsiniz. Konu başlığında açıklanan örnek senaryoları çalıştırmayı planlıyorsanız, bu yönergelerin içindeki kodu değiştirmeyin.
Daha fazla bilgi için bkz. ASP.NET belgelerine katkıda bulunma: Kod parçacıkları.
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 WebApplicationBuilder.Servicesbuilder.Services ile DI kapsayıcısına eklenir. Örnek WebApplicationBuilder oluşturulduğunda, 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();
}
}
Middleware
İ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ı.
Host
Başlangıçta, bir ASP.NET Core uygulaması bir host oluşturur. Ana bilgisayar, uygulamanın tüm kaynaklarını kapsüller, örneğin:
- Bir HTTP sunucusu uygulaması
- Ara yazılım bileşenleri
- Logging
- Bağımlılık ekleme (DI) hizmetleri
- Configuration
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 konağı aşağıdaki gibi bir dizi varsayılan seçenekle yapılandırıyor:
- Web sunucusu olarak Kestrel kullanın ve IIS tümleştirmesini etkinleştirin.
- Yapılandırmayı konfigürasyon,
appsettings.json, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynaklarından yükleyin. - 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.
Servers
ASP.NET Core uygulaması, HTTP isteklerini dinlemek için bir HTTP sunucusu uygulaması kullanır. Sunucu, istekleri bir içinde oluşturulan istek HttpContext kümesi olarak uygulamaya sunar.
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 , IIS ile kullanılmayan bir Windows sunucusudur.
Daha fazla bilgi için, bkz. ASP.NET Core'da Web sunucusu uygulamaları.
Configuration
ASP.NET Core, ayarları sıralı bir yapılandırma sağlayıcısı kümesinden ad-değer çiftleri olarak alan bir yapılandırma çerçevesi sağlar. Yerleşik yapılandırma sağlayıcıları .json dosyaları, .xml dosyaları, ortam değişkenleri ve komut satırı bağımsız değişkenleri gibi çeşitli kaynaklar için kullanılabilir. Diğer kaynakları desteklemek için özel yapılandırma sağlayıcıları yazın.
Varsayılan olarak, ASP.NET Core uygulamaları , appsettings.jsonortam değişkenleri, komut satırı ve daha fazlasını okuyacak şekilde yapılandırılır. Uygulamanın yapılandırması yüklendiğinde, ortam değişkenlerinden gelen değerler, appsettings.json öğesinden gelen değerleri geçersiz kılar.
.NET, parolalar gibi gizli yapılandırma verilerini yönetmek için Gizli Dizi Yöneticisi'ni 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.
Environments
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 çalışma zamanı ortamları.
Logging
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:
- Console
- Debug
- 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 ve ASP.NET Core'da oturum açma.
Routing
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 yönetimi
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.
-
HttpClientHandleryaş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ş derlemeler (.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çin 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 şeklindedir. Ana bilgisayarı oluştururken yolunu ayarlayarak farklı bir web kökü belirtin. Daha fazla bilgi için bkz. Web kökü.
Proje dosyasında < dosya yayımlamayı 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ı.
Örnek indirme
Çoğu makale ve öğretici örnek koda bağlantılar içerir.
- ASP.NET deposu zip dosyasını indirin.
- Dosyanın sıkıştırmasını açın
AspNetCore.Docs-main.zip. - Bir makalenin sıkıştırması açılmış depodaki örnek uygulamasına erişmek için makalenin örnek bağlantısındaki URL'yi kullanarak örneğin klasörüne gitmenize yardımcı olun. Genellikle makalenin örnek bağlantısı makalenin üst kısmında Örnek kodu görüntüle veya indir bağlantı metniyle gösterilir.
Örnek kodda ön işlemci yönergeleri
Birden çok senaryoyu göstermek için örnek uygulamalar, örnek kodun #define farklı bölümlerini seçmeli olarak derlemek ve çalıştırmak için ve #if-#else/#elif-#endif önişlemci yönergelerini kullanır. Bu yaklaşımı kullanan örnekler için, çalıştırmak istediğiniz senaryoyla ilişkili simgeyi tanımlamak için C# dosyalarının en üstündeki yönergesini ayarlayın #define . Bazı örneklerin bir senaryoyu çalıştırmak için birden çok dosya üst kısmında sembol tanımlaması gerekir.
Örneğin, aşağıdaki simge listesi #define dört senaryonun kullanılabilir olduğunu gösterir (her simge için bir senaryo). Geçerli örnek yapılandırması TemplateCode senaryosunu çalıştırır:
#define TemplateCode // or LogFromMain or ExpandDefault or FilterInCode
Örneği ExpandDefault senaryosunu çalıştıracak şekilde değiştirmek için ExpandDefault simgesini tanımlayın ve kalan simgeleri açıklama satırı yapılmış şekilde bırakın:
#define ExpandDefault // TemplateCode or LogFromMain or FilterInCode
Kod bölümlerini seçmeli olarak derlemek için C# önişlemci yönergelerini kullanma hakkında daha fazla bilgi için bkz. #define (C# Başvurusu) ve #if (C# Başvurusu).
Örnek koddaki bölgeler
Bazı örnek uygulamalar , #region ve #endregion C# yönergeleriyle çevrili kod bölümleri içerir. Belge derleme sistemi, bu bölgeleri işlenen belge konularına ekler.
Bölge adları genellikle "kod parçacığı" sözcüğünü içerir. Aşağıdaki örnekte adlı snippet_WebHostDefaultsbir bölge gösterilmektedir:
#region snippet_WebHostDefaults
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
#endregion
Yukarıdaki C# kod parçacığına, konunun markdown dosyasında aşağıdaki satırla başvurulur:
[!code-csharp[](sample/SampleApp/Program.cs?name=snippet_WebHostDefaults)]
Kodu çevreleyen #region ve #endregion yönergelerini güvenle görmezden gelebilir veya kaldırabilirsiniz. Konu başlığında açıklanan örnek senaryoları çalıştırmayı planlıyorsanız, bu yönergelerin içindeki kodu değiştirmeyin.
Daha fazla bilgi için bkz. ASP.NET belgelerine katkıda bulunma: Kod parçacıkları.
ASP.NET Core