Bagikan melalui


Ringkasan dasar-dasar ASP.NET Core

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Penting

Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Artikel ini memberikan ringkasan tentang dasar-dasar untuk membangun aplikasi ASP.NET Core, termasuk injeksi dependensi (DI), konfigurasi, middleware, dan banyak lagi.

Untuk Blazor panduan dasar-dasar, yang menambahkan atau menggantikan panduan dalam simpul ini, lihat ASP.NET dasar-dasar CoreBlazor.

Program.cs

Aplikasi ASP.NET Core yang dibuat dengan template web berisi kode pengaktifan aplikasi dalam file Program.cs. File Program.cs adalah tempat:

  • Layanan yang diperlukan oleh aplikasi dikonfigurasi.
  • Alur penanganan permintaan aplikasi didefinisikan sebagai serangkaian komponen middleware.

Kode startup aplikasi berikut mendukung:

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

Injeksi dependensi (layanan)

ASP.NET Core menyertakan injeksi dependensi (DI) yang membuat layanan yang dikonfigurasi tersedia di seluruh aplikasi. Layanan ditambahkan ke kontainer DI dengan WebApplicationBuilder.Services, builder.Services dalam kode sebelumnya. Saat WebApplicationBuilder dibuat, banyak layanan yang disediakan kerangka kerja ditambahkan. builder merupakan WebApplicationBuilder dalam kode berikut:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Dalam kode yang disorot sebelumnya, builder memiliki konfigurasi, pengelogan, dan banyak layanan lain yang ditambahkan ke kontainer DI.

Kode berikut menambahkan Halaman Razor, pengontrol MVC dengan tampilan, dan DbContext kustom ke kontainer DI:

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

Layanan biasanya diselesaikan dari DI menggunakan injeksi konstruktor. Kerangka kerja DI menyediakan instans layanan ini saat runtime.

Kode berikut menggunakan injeksi konstruktor untuk menyelesaikan konteks database dan pencatat dari DI:

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

Alur penanganan permintaan terdiri dari serangkaian komponen middleware. Setiap komponen melakukan operasi pada HttpContext dan memanggil middleware berikutnya dalam alur atau menghentikan permintaan.

Berdasarkan konvensi, komponen middleware ditambahkan ke alur dengan menerapkan metode ekstensi Use{Feature}. Middleware yang ditambahkan ke aplikasi disorot dalam kode berikut:

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

Untuk informasi lebih lanjut, lihat Middleware ASP.NET Core.

Host

Saat memulai, aplikasi ASP.NET Core membuat host. Host merangkum semua sumber daya aplikasi, seperti:

  • Penerapan server HTTP
  • Komponen middleware
  • Pencatatan
  • Layanan injeksi dependensi (DI)
  • Konfigurasi

Ada tiga host berbeda yang mampu menjalankan aplikasi ASP.NET Core:

ASP.NET Core WebApplication dan WebApplicationBuilder jenis direkomendasikan dan digunakan di semua templat ASP.NET Core. WebApplication bersifat mirip dengan Host Generik .NET dan mengekspos banyak antarmuka yang sama tetapi membutuhkan lebih sedikit panggilan balik untuk dikonfigurasi. ASP.NET Core WebHost hanya tersedia untuk kompatibilitas mundur.

Contoh berikut membuat instans :WebApplication

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Metode WebApplicationBuilder.Build mengonfigurasi host dengan serangkaian opsi default, seperti:

  • Gunakan Kestrel sebagai server web dan aktifkan integrasi IIS.
  • Muat konfigurasi dari appsettings.json, variabel lingkungan, argumen baris perintah, dan sumber konfigurasi lainnya.
  • Kirim output pengelogan ke konsol dan penyedia debug.

Skenario non-web

Generic Host memungkinkan jenis aplikasi lain menggunakan ekstensi kerangka kerja lintas sektoral, seperti pengelogan, injeksi dependensi (DI), konfigurasi, dan manajemen masa pakai aplikasi. Untuk informasi lebih lanjut, lihat .NET Generic Host di ASP.NET Core dan Tugas latar belakang dengan layanan yang dihosting di ASP.NET Core.

Server

Aplikasi ASP.NET Core menggunakan penerapan server HTTP untuk mendengarkan permintaan HTTP. Server memunculkan permintaan ke aplikasi sebagai kumpulan fitur permintaan yang terdiri dari HttpContext.

ASP.NET Core menyediakan penerapan server berikut:

  • Kestrel adalah server web lintas platform. Kestrel sering dijalankan dalam konfigurasi proksi terbalik menggunakan IIS. Di ASP.NET Core 2.0 atau yang lebih baru, Kestrel dapat dijalankan sebagai server tepi yang mengarah ke publik yang terhubung langsung ke Internet.
  • Server HTTP IIS adalah server untuk Windows yang menggunakan IIS. Dengan server ini, aplikasi ASP.NET Core dan IIS berjalan dalam proses yang sama.
  • HTTP.sys adalah server untuk Windows yang tidak digunakan dengan IIS.

Untuk informasi lebih lanjut, lihat Penerapan server web di ASP.NET Core.

Konfigurasi

ASP.NET Core menyediakan kerangka kerja konfigurasi yang mendapatkan pengaturan sebagai pasangan nama-nilai dari set penyedia konfigurasi yang diurutkan. Penyedia konfigurasi bawaan tersedia untuk berbagai sumber, seperti file .json, file .xml, variabel lingkungan, dan argumen baris perintah. Tulis penyedia konfigurasi kustom untuk mendukung sumber lain.

Secara default, aplikasi ASP.NET Core dikonfigurasi untuk membaca dari appsettings.json, variabel lingkungan, baris perintah, dan banyak lagi. Saat konfigurasi aplikasi dimuat, nilai dari variabel lingkungan menggantikan nilai dari appsettings.json.

Untuk mengelola data konfigurasi rahasia seperti kata sandi, .NET Core menyediakan Pengelola Rahasia. Untuk rahasia produksi, kami menyarankan Azure Key Vault.

Untuk informasi lebih lanjut, lihat Konfigurasi di ASP.NET Core.

Lingkungan

Lingkungan eksekusi, seperti Development, Staging, dan Production, tersedia di ASP.NET Core. Tentukan lingkungan tempat aplikasi berjalan dengan mengatur variabel lingkungan ASPNETCORE_ENVIRONMENT. ASP.NET Core membaca variabel lingkungan tersebut saat memulai aplikasi dan menyimpan nilainya dalam penerapan IWebHostEnvironment. Penerapan ini tersedia di mana saja di aplikasi melalui injeksi dependensi (DI).

Contoh berikut mengonfigurasi penangan pengecualian dan middleware HTTP Strict Transport Security Protocol (HSTS) saat tidak berjalan di lingkungan Development:

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

Untuk informasi lebih lanjut, lihat Menggunakan beberapa lingkungan di ASP.NET Core.

Pencatatan

ASP.NET Core mendukung API pengelogan yang bekerja dengan berbagai penyedia pengelogan bawaan dan pihak ketiga. Penyedia yang tersedia meliputi:

  • Konsol
  • Debug
  • Pelacakan Peristiwa di Windows
  • Log Peristiwa Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Untuk membuat log, selesaikan layanan ILogger<TCategoryName> dari injeksi dependensi (DI) dan panggil metode pengelogan seperti LogInformation. Contohnya:

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

Untuk informasi selengkapnya, lihat Pengelogan .NET Core dan ASP.NET Core.

Perutean

Rute adalah pola URL yang dipetakan ke penangan. Penangan biasanya adalah halaman Razor, metode tindakan dalam pengontrol MVC, atau middleware. Perutean ASP.NET core memberi Anda kontrol atas URL yang digunakan oleh aplikasi Anda.

Kode berikut, yang dibuat oleh template aplikasi web ASP.NET Core, memanggil UseRouting:

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

Untuk informasi lebih lanjut, lihat Perutean di ASP.NET Core.

Penanganan kesalahan

ASP.NET Core memiliki fitur bawaan untuk menangani kesalahan, seperti:

  • Halaman pengecualian pengembang
  • Halaman kesalahan kustom
  • Halaman kode status statis
  • Penanganan pengecualian startup

Untuk informasi lebih lanjut, lihat Menangani kesalahan di ASP.NET Core.

Membuat permintaan HTTP

Penerapan IHttpClientFactory tersedia untuk membuat instans HttpClient. Pabrik:

  • Menyediakan lokasi pusat untuk penamaan dan konfigurasi instans HttpClient logis. Misalnya, daftarkan dan konfigurasikan klien github untuk mengakses GitHub. Daftarkan dan konfigurasikan klien default untuk tujuan lain.
  • Mendukung pendaftaran dan rantai beberapa penangan pendelegasian untuk membangun alur middleware permintaan keluar. Pola ini mirip dengan alur middleware masuk ASP.NET Core. Pola tersebut menyediakan mekanisme untuk mengelola masalah lintas sektoral untuk permintaan HTTP, termasuk penembolokan, penanganan kesalahan, serialisasi, dan pengelogan.
  • Terintegrasi dengan Polly, pustaka pihak ketiga yang populer untuk penanganan kesalahan sementara.
  • Mengelola pengumpulan dan masa pakai instans HttpClientHandler yang mendasarinya untuk menghindari masalah DNS umum yang terjadi saat mengelola masa pakai HttpClient secara manual.
  • Menambahkan pengalaman pencatatan yang dapat dikonfigurasi melalui ILogger untuk semua permintaan yang dikirim melalui klien yang dibuat oleh pabrik.

Untuk informasi lebih lanjut, lihat Membuat permintaan HTTP menggunakan IHttpClientFactory di ASP.NET Core.

Akar konten

Akar konten adalah jalur dasar untuk:

  • Hosting aplikasi yang dapat dieksekusi (.exe).
  • Rakitan yang dikompilasi yang membentuk aplikasi (.dll).
  • File konten yang digunakan oleh aplikasi, seperti:
    • File Razor (.cshtml, .razor)
    • File konfigurasi (.json, .xml)
    • File data (.db)
  • Akar web, biasanya folder wwwroot.

Selama pengembangan, secara default, akar konten diatur ke direktori akar proyek. Direktori ini juga merupakan jalur dasar untuk file konten aplikasi dan akar Web. Tentukan akar konten yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar konten.

Akar web

Akar web adalah jalur dasar untuk file sumber daya publik dan statis, seperti:

  • Lembar Gaya (.css)
  • JavaScript (.js)
  • Gambar (.png, .jpg)

Secara default, file statis hanya dilayani dari direktori akar web dan sub-direktorinya. Secara default, alur akar web diatur ke {content root}/wwwroot. Tentukan akar web yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar web.

Cegah penerbitan file di wwwroot dengan item proyek <Konten> di file proyek. Contoh berikut mencegah penerbitan konten di wwwroot/local dan subdirektorinya:

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

Dalam file Razor.cshtml, ~/ mengarah ke akar web. Jalur yang diawali dengan ~/ disebut sebagai jalur virtual.

Untuk informasi selengkapnya, lihat File statis di ASP.NET Core.

Sumber Daya Tambahan:

Artikel ini memberikan ringkasan tentang dasar-dasar untuk membangun aplikasi ASP.NET Core, termasuk injeksi dependensi (DI), konfigurasi, middleware, dan banyak lagi.

Program.cs

Aplikasi ASP.NET Core yang dibuat dengan template web berisi kode pengaktifan aplikasi dalam file Program.cs. File Program.cs adalah tempat:

  • Layanan yang diperlukan oleh aplikasi dikonfigurasi.
  • Alur penanganan permintaan aplikasi didefinisikan sebagai serangkaian komponen middleware.

Kode startup aplikasi berikut mendukung:

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

Injeksi dependensi (layanan)

ASP.NET Core menyertakan injeksi dependensi (DI) yang membuat layanan yang dikonfigurasi tersedia di seluruh aplikasi. Layanan ditambahkan ke kontainer DI dengan WebApplicationBuilder.Services, builder.Services dalam kode sebelumnya. Saat WebApplicationBuilder dibuat, banyak layanan yang disediakan kerangka kerja ditambahkan. builder merupakan WebApplicationBuilder dalam kode berikut:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Dalam kode yang disorot sebelumnya, builder memiliki konfigurasi, pengelogan, dan banyak layanan lain yang ditambahkan ke kontainer DI.

Kode berikut menambahkan Halaman Razor, pengontrol MVC dengan tampilan, dan DbContext kustom ke kontainer DI:

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

Layanan biasanya diselesaikan dari DI menggunakan injeksi konstruktor. Kerangka kerja DI menyediakan instans layanan ini saat runtime.

Kode berikut menggunakan injeksi konstruktor untuk menyelesaikan konteks database dan pencatat dari DI:

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

Alur penanganan permintaan terdiri dari serangkaian komponen middleware. Setiap komponen melakukan operasi pada HttpContext dan memanggil middleware berikutnya dalam alur atau menghentikan permintaan.

Berdasarkan konvensi, komponen middleware ditambahkan ke alur dengan menerapkan metode ekstensi Use{Feature}. Middleware yang ditambahkan ke aplikasi disorot dalam kode berikut:

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

Untuk informasi lebih lanjut, lihat Middleware ASP.NET Core.

Host

Saat memulai, aplikasi ASP.NET Core membuat host. Host merangkum semua sumber daya aplikasi, seperti:

  • Penerapan server HTTP
  • Komponen middleware
  • Pencatatan
  • Layanan injeksi dependensi (DI)
  • Konfigurasi

Ada tiga host berbeda yang mampu menjalankan aplikasi ASP.NET Core:

ASP.NET Core WebApplication dan WebApplicationBuilder jenis direkomendasikan dan digunakan di semua templat ASP.NET Core. WebApplication bersifat mirip dengan Host Generik .NET dan mengekspos banyak antarmuka yang sama tetapi membutuhkan lebih sedikit panggilan balik untuk dikonfigurasi. ASP.NET Core WebHost hanya tersedia untuk kompatibilitas mundur.

Contoh berikut membuat instans :WebApplication

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Metode WebApplicationBuilder.Build mengonfigurasi host dengan serangkaian opsi default, seperti:

  • Gunakan Kestrel sebagai server web dan aktifkan integrasi IIS.
  • Muat konfigurasi dari appsettings.json, variabel lingkungan, argumen baris perintah, dan sumber konfigurasi lainnya.
  • Kirim output pengelogan ke konsol dan penyedia debug.

Skenario non-web

Generic Host memungkinkan jenis aplikasi lain menggunakan ekstensi kerangka kerja lintas sektoral, seperti pengelogan, injeksi dependensi (DI), konfigurasi, dan manajemen masa pakai aplikasi. Untuk informasi lebih lanjut, lihat .NET Generic Host di ASP.NET Core dan Tugas latar belakang dengan layanan yang dihosting di ASP.NET Core.

Server

Aplikasi ASP.NET Core menggunakan penerapan server HTTP untuk mendengarkan permintaan HTTP. Server memunculkan permintaan ke aplikasi sebagai kumpulan fitur permintaan yang terdiri dari HttpContext.

ASP.NET Core menyediakan penerapan server berikut:

  • Kestrel adalah server web lintas platform. Kestrel sering dijalankan dalam konfigurasi proksi terbalik menggunakan IIS. Di ASP.NET Core 2.0 atau yang lebih baru, Kestrel dapat dijalankan sebagai server tepi yang mengarah ke publik yang terhubung langsung ke Internet.
  • Server HTTP IIS adalah server untuk Windows yang menggunakan IIS. Dengan server ini, aplikasi ASP.NET Core dan IIS berjalan dalam proses yang sama.
  • HTTP.sys adalah server untuk Windows yang tidak digunakan dengan IIS.

Untuk informasi lebih lanjut, lihat Penerapan server web di ASP.NET Core.

Konfigurasi

ASP.NET Core menyediakan kerangka kerja konfigurasi yang mendapatkan pengaturan sebagai pasangan nama-nilai dari set penyedia konfigurasi yang diurutkan. Penyedia konfigurasi bawaan tersedia untuk berbagai sumber, seperti file .json, file .xml, variabel lingkungan, dan argumen baris perintah. Tulis penyedia konfigurasi kustom untuk mendukung sumber lain.

Secara default, aplikasi ASP.NET Core dikonfigurasi untuk membaca dari appsettings.json, variabel lingkungan, baris perintah, dan banyak lagi. Saat konfigurasi aplikasi dimuat, nilai dari variabel lingkungan menggantikan nilai dari appsettings.json.

Untuk mengelola data konfigurasi rahasia seperti kata sandi, .NET Core menyediakan Pengelola Rahasia. Untuk rahasia produksi, kami menyarankan Azure Key Vault.

Untuk informasi lebih lanjut, lihat Konfigurasi di ASP.NET Core.

Lingkungan

Lingkungan eksekusi, seperti Development, Staging, dan Production, tersedia di ASP.NET Core. Tentukan lingkungan tempat aplikasi berjalan dengan mengatur variabel lingkungan ASPNETCORE_ENVIRONMENT. ASP.NET Core membaca variabel lingkungan tersebut saat memulai aplikasi dan menyimpan nilainya dalam penerapan IWebHostEnvironment. Penerapan ini tersedia di mana saja di aplikasi melalui injeksi dependensi (DI).

Contoh berikut mengonfigurasi penangan pengecualian dan middleware HTTP Strict Transport Security Protocol (HSTS) saat tidak berjalan di lingkungan Development:

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

Untuk informasi lebih lanjut, lihat Menggunakan beberapa lingkungan di ASP.NET Core.

Pencatatan

ASP.NET Core mendukung API pengelogan yang bekerja dengan berbagai penyedia pengelogan bawaan dan pihak ketiga. Penyedia yang tersedia meliputi:

  • Konsol
  • Debug
  • Pelacakan Peristiwa di Windows
  • Log Peristiwa Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Untuk membuat log, selesaikan layanan ILogger<TCategoryName> dari injeksi dependensi (DI) dan panggil metode pengelogan seperti LogInformation. Contohnya:

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

Untuk informasi selengkapnya, lihat Pengelogan .NET Core dan ASP.NET Core.

Perutean

Rute adalah pola URL yang dipetakan ke penangan. Penangan biasanya adalah halaman Razor, metode tindakan dalam pengontrol MVC, atau middleware. Perutean ASP.NET core memberi Anda kontrol atas URL yang digunakan oleh aplikasi Anda.

Kode berikut, yang dibuat oleh template aplikasi web ASP.NET Core, memanggil UseRouting:

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

Untuk informasi lebih lanjut, lihat Perutean di ASP.NET Core.

Penanganan kesalahan

ASP.NET Core memiliki fitur bawaan untuk menangani kesalahan, seperti:

  • Halaman pengecualian pengembang
  • Halaman kesalahan kustom
  • Halaman kode status statis
  • Penanganan pengecualian startup

Untuk informasi lebih lanjut, lihat Menangani kesalahan di ASP.NET Core.

Membuat permintaan HTTP

Penerapan IHttpClientFactory tersedia untuk membuat instans HttpClient. Pabrik:

  • Menyediakan lokasi pusat untuk penamaan dan konfigurasi instans HttpClient logis. Misalnya, daftarkan dan konfigurasikan klien github untuk mengakses GitHub. Daftarkan dan konfigurasikan klien default untuk tujuan lain.
  • Mendukung pendaftaran dan rantai beberapa penangan pendelegasian untuk membangun alur middleware permintaan keluar. Pola ini mirip dengan alur middleware masuk ASP.NET Core. Pola tersebut menyediakan mekanisme untuk mengelola masalah lintas sektoral untuk permintaan HTTP, termasuk penembolokan, penanganan kesalahan, serialisasi, dan pengelogan.
  • Terintegrasi dengan Polly, pustaka pihak ketiga yang populer untuk penanganan kesalahan sementara.
  • Mengelola pengumpulan dan masa pakai instans HttpClientHandler yang mendasarinya untuk menghindari masalah DNS umum yang terjadi saat mengelola masa pakai HttpClient secara manual.
  • Menambahkan pengalaman pencatatan yang dapat dikonfigurasi melalui ILogger untuk semua permintaan yang dikirim melalui klien yang dibuat oleh pabrik.

Untuk informasi lebih lanjut, lihat Membuat permintaan HTTP menggunakan IHttpClientFactory di ASP.NET Core.

Akar konten

Akar konten adalah jalur dasar untuk:

  • Hosting aplikasi yang dapat dieksekusi (.exe).
  • Rakitan yang dikompilasi yang membentuk aplikasi (.dll).
  • File konten yang digunakan oleh aplikasi, seperti:
    • File Razor (.cshtml, .razor)
    • File konfigurasi (.json, .xml)
    • File data (.db)
  • Akar web, biasanya folder wwwroot.

Selama pengembangan, secara default, akar konten diatur ke direktori akar proyek. Direktori ini juga merupakan jalur dasar untuk file konten aplikasi dan akar Web. Tentukan akar konten yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar konten.

Akar web

Akar web adalah jalur dasar untuk file sumber daya publik dan statis, seperti:

  • Lembar Gaya (.css)
  • JavaScript (.js)
  • Gambar (.png, .jpg)

Secara default, file statis hanya dilayani dari direktori akar web dan sub-direktorinya. Secara default, alur akar web diatur ke {content root}/wwwroot. Tentukan akar web yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar web.

Cegah penerbitan file di wwwroot dengan item proyek <Konten> di file proyek. Contoh berikut mencegah penerbitan konten di wwwroot/local dan subdirektorinya:

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

Dalam file Razor.cshtml, ~/ mengarah ke akar web. Jalur yang diawali dengan ~/ disebut sebagai jalur virtual.

Untuk informasi selengkapnya, lihat File statis di ASP.NET Core.

Sumber Daya Tambahan:

Artikel ini memberikan ringkasan tentang dasar-dasar untuk membangun aplikasi ASP.NET Core, termasuk injeksi dependensi (DI), konfigurasi, middleware, dan banyak lagi.

Kelas Startup

Kelas Startup adalah tempat:

  • Layanan yang diperlukan oleh aplikasi dikonfigurasi.
  • Alur penanganan permintaan aplikasi didefinisikan, sebagai serangkaian komponen middleware.

Berikut adalah contoh kelas Startup:

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

Untuk informasi selengkapnya, lihat Pengaktifan aplikasi di ASP.NET Core.

Injeksi dependensi (layanan)

ASP.NET Core menyertakan kerangka kerja injeksi dependensi (DI) bawaan yang membuat layanan yang dikonfigurasi tersedia di seluruh aplikasi. Misalnya, komponen pengelogan adalah layanan.

Kode untuk mengonfigurasi (atau mendaftarkan) layanan ditambahkan ke metode Startup.ConfigureServices. Contohnya:

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

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

Layanan biasanya diselesaikan dari DI menggunakan injeksi konstruktor. Dengan injeksi konstruktor, kelas mendeklarasikan parameter konstruktor dari jenis yang diperlukan atau antarmuka. Kerangka kerja DI menyediakan instans layanan ini saat runtime.

Contoh berikut menggunakan injeksi konstruktor untuk menyelesaikan RazorPagesMovieContext dari DI:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

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

    // ...

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

Jika kontainer Inversion of Control (IoC) bawaan tidak memenuhi semua kebutuhan aplikasi, kontainer IoC pihak ketiga dapat digunakan sebagai gantinya.

Untuk informasi lebih lanjut, lihat Injeksi dependensi di ASP.NET Core.

Middleware

Alur penanganan permintaan terdiri dari serangkaian komponen middleware. Setiap komponen melakukan operasi pada HttpContext dan memanggil middleware berikutnya dalam alur atau menghentikan permintaan.

Menurut konvensi, komponen middleware ditambahkan ke alur dengan memanggil metode ekstensi Use... dalam metode Startup.Configure. Misalnya, untuk mengaktifkan perenderan file statis, panggil UseStaticFiles.

Contoh berikut mengonfigurasi alur penanganan permintaan:

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

    app.UseRouting();

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

ASP.NET Core mencakup set middleware bawaan yang kaya. Komponen middleware kustom juga dapat ditulis.

Untuk informasi lebih lanjut, lihat Middleware ASP.NET Core.

Host

Saat memulai, aplikasi ASP.NET Core membuat host. Host merangkum semua sumber daya aplikasi, seperti:

  • Penerapan server HTTP
  • Komponen middleware
  • Pencatatan
  • Layanan injeksi dependensi (DI)
  • Konfigurasi

Ada dua host yang berbeda:

  • Host Umum .NET
  • ASP.NET Core Web Host

.NET Generic Host direkomendasikan. Host Web ASP.NET Core hanya tersedia untuk kompatibilitas mundur.

Contoh berikut membuat .NET Generic Host:

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

Metode CreateDefaultBuilder dan ConfigureWebHostDefaults mengonfigurasi host dengan serangkaian opsi default, seperti:

  • Gunakan Kestrel sebagai server web dan aktifkan integrasi IIS.
  • Muat konfigurasi dari appsettings.json, appsettings.{Environment}.json, variabel lingkungan, argumen baris perintah, dan sumber konfigurasi lainnya.
  • Kirim output pengelogan ke konsol dan penyedia debug.

Untuk informasi lebih lanjut, lihat .NET Generic Host di ASP.NET Core.

Skenario non-web

Generic Host memungkinkan jenis aplikasi lain menggunakan ekstensi kerangka kerja lintas sektoral, seperti pengelogan, injeksi dependensi (DI), konfigurasi, dan manajemen masa pakai aplikasi. Untuk informasi lebih lanjut, lihat .NET Generic Host di ASP.NET Core dan Tugas latar belakang dengan layanan yang dihosting di ASP.NET Core.

Server

Aplikasi ASP.NET Core menggunakan penerapan server HTTP untuk mendengarkan permintaan HTTP. Server memunculkan permintaan ke aplikasi sebagai kumpulan fitur permintaan yang terdiri dari HttpContext.

ASP.NET Core menyediakan penerapan server berikut:

  • Kestrel adalah server web lintas platform. Kestrel sering dijalankan dalam konfigurasi proksi terbalik menggunakan IIS. Di ASP.NET Core 2.0 atau yang lebih baru, Kestrel dapat dijalankan sebagai server tepi yang mengarah ke publik yang terhubung langsung ke Internet.
  • Server HTTP IIS adalah server untuk Windows yang menggunakan IIS. Dengan server ini, aplikasi ASP.NET Core dan IIS berjalan dalam proses yang sama.
  • HTTP.sys adalah server untuk Windows yang tidak digunakan dengan IIS.

Untuk informasi lebih lanjut, lihat Penerapan server web di ASP.NET Core.

Konfigurasi

ASP.NET Core menyediakan kerangka kerja konfigurasi yang mendapatkan pengaturan sebagai pasangan nama-nilai dari set penyedia konfigurasi yang diurutkan. Penyedia konfigurasi bawaan tersedia untuk berbagai sumber, seperti file .json, file .xml, variabel lingkungan, dan argumen baris perintah. Tulis penyedia konfigurasi kustom untuk mendukung sumber lain.

Secara default, aplikasi ASP.NET Core dikonfigurasi untuk membaca dari appsettings.json, variabel lingkungan, baris perintah, dan banyak lagi. Saat konfigurasi aplikasi dimuat, nilai dari variabel lingkungan menggantikan nilai dari appsettings.json.

Cara yang lebih disukai untuk membaca nilai konfigurasi terkait adalah menggunakan pola opsi. Untuk informasi lebih lanjut, lihat Mengikat data konfigurasi hierarki menggunakan pola opsi.

Untuk mengelola data konfigurasi rahasia seperti kata sandi, .NET Core menyediakan Pengelola Rahasia. Untuk rahasia produksi, kami menyarankan Azure Key Vault.

Untuk informasi lebih lanjut, lihat Konfigurasi di ASP.NET Core.

Lingkungan

Lingkungan eksekusi, seperti Development, Staging, dan Production, adalah gagasan kelas satu di ASP.NET Core. Tentukan lingkungan tempat aplikasi berjalan dengan mengatur variabel lingkungan ASPNETCORE_ENVIRONMENT. ASP.NET Core membaca variabel lingkungan tersebut saat memulai aplikasi dan menyimpan nilainya dalam penerapan IWebHostEnvironment. Penerapan ini tersedia di mana saja di aplikasi melalui injeksi dependensi (DI).

Contoh berikut mengonfigurasi aplikasi untuk memberikan detail informasi kesalahan saat berjalan di lingkungan Development:

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

Untuk informasi lebih lanjut, lihat Menggunakan beberapa lingkungan di ASP.NET Core.

Pencatatan

ASP.NET Core mendukung API pengelogan yang bekerja dengan berbagai penyedia pengelogan bawaan dan pihak ketiga. Penyedia yang tersedia meliputi:

  • Konsol
  • Debug
  • Pelacakan Peristiwa di Windows
  • Log Peristiwa Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Untuk membuat log, selesaikan layanan ILogger<TCategoryName> dari injeksi dependensi (DI) dan panggil metode pengelogan seperti LogInformation. Contohnya:

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

Metode pengelogan seperti LogInformation mendukung sejumlah bidang. Bidang ini biasanya digunakan untuk membuat pesan string, tetapi beberapa penyedia pengelogan mengirimkannya ke penyimpanan data sebagai bidang terpisah. Fitur ini memungkinkan penyedia pengelogan menerapkan pengelogan semantik, juga dikenal sebagai pengelogan terstruktur.

Untuk informasi selengkapnya, lihat Pengelogan .NET Core dan ASP.NET Core.

Perutean

Rute adalah pola URL yang dipetakan ke penangan. Penangan biasanya adalah halaman Razor, metode tindakan dalam pengontrol MVC, atau middleware. Perutean ASP.NET core memberi Anda kontrol atas URL yang digunakan oleh aplikasi Anda.

Untuk informasi lebih lanjut, lihat Perutean di ASP.NET Core.

Penanganan kesalahan

ASP.NET Core memiliki fitur bawaan untuk menangani kesalahan, seperti:

  • Halaman pengecualian pengembang
  • Halaman kesalahan kustom
  • Halaman kode status statis
  • Penanganan pengecualian startup

Untuk informasi lebih lanjut, lihat Menangani kesalahan di ASP.NET Core.

Membuat permintaan HTTP

Penerapan IHttpClientFactory tersedia untuk membuat instans HttpClient. Pabrik:

  • Menyediakan lokasi pusat untuk penamaan dan konfigurasi instans HttpClient logis. Misalnya, daftarkan dan konfigurasikan klien github untuk mengakses GitHub. Daftarkan dan konfigurasikan klien default untuk tujuan lain.
  • Mendukung pendaftaran dan rantai beberapa penangan pendelegasian untuk membangun alur middleware permintaan keluar. Pola ini mirip dengan alur middleware masuk ASP.NET Core. Pola tersebut menyediakan mekanisme untuk mengelola masalah lintas sektoral untuk permintaan HTTP, termasuk penembolokan, penanganan kesalahan, serialisasi, dan pengelogan.
  • Terintegrasi dengan Polly, pustaka pihak ketiga yang populer untuk penanganan kesalahan sementara.
  • Mengelola pengumpulan dan masa pakai instans HttpClientHandler yang mendasarinya untuk menghindari masalah DNS umum yang terjadi saat mengelola masa pakai HttpClient secara manual.
  • Menambahkan pengalaman pencatatan yang dapat dikonfigurasi melalui ILogger untuk semua permintaan yang dikirim melalui klien yang dibuat oleh pabrik.

Untuk informasi lebih lanjut, lihat Membuat permintaan HTTP menggunakan IHttpClientFactory di ASP.NET Core.

Akar konten

Akar konten adalah jalur dasar untuk:

  • Hosting aplikasi yang dapat dieksekusi (.exe).
  • Rakitan yang dikompilasi yang membentuk aplikasi (.dll).
  • File konten yang digunakan oleh aplikasi, seperti:
    • File Razor (.cshtml, .razor)
    • File konfigurasi (.json, .xml)
    • File data (.db)
  • Akar web, biasanya folder wwwroot.

Selama pengembangan, secara default, akar konten diatur ke direktori akar proyek. Direktori ini juga merupakan jalur dasar untuk file konten aplikasi dan akar Web. Tentukan akar konten yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar konten.

Akar web

Akar web adalah jalur dasar untuk file sumber daya publik dan statis, seperti:

  • Lembar Gaya (.css)
  • JavaScript (.js)
  • Gambar (.png, .jpg)

Secara default, file statis hanya dilayani dari direktori akar web dan sub-direktorinya. Secara default, alur akar web diatur ke {content root}/wwwroot. Tentukan akar web yang berbeda dengan mengatur jalurnya saat membangun host. Untuk informasi lebih lanjut, lihat Akar web.

Cegah penerbitan file di wwwroot dengan item proyek <Konten> di file proyek. Contoh berikut mencegah penerbitan konten di wwwroot/local dan subdirektorinya:

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

Dalam file Razor.cshtml, tilde-slash (~/) menunjuk ke akar web. Jalur yang diawali dengan ~/ disebut sebagai jalur virtual.

Untuk informasi selengkapnya, lihat File statis di ASP.NET Core.