Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Lingkungan menyediakan konteks untuk menjalankan aplikasi. Parameter mengekspresikan kemampuan untuk meminta nilai eksternal saat menjalankan aplikasi. Parameter dapat digunakan untuk memberikan nilai ke aplikasi saat berjalan secara lokal, atau untuk meminta nilai saat menyebarkan. Mereka dapat digunakan untuk memodelkan berbagai skenario termasuk rahasia, string koneksi, dan nilai konfigurasi lainnya yang mungkin bervariasi di antara lingkungan.
Nilai parameter
Nilai parameter dibaca dari bagian Parameters
konfigurasi host aplikasi dan digunakan untuk memberikan nilai ke aplikasi saat berjalan secara lokal. Saat Memublikasikan aplikasi, jika nilai tidak dikonfigurasi, Anda akan diminta untuk menyediakannya.
Pertimbangkan contoh file host aplikasi Program.cs berikut:
var builder = DistributedApplication.CreateBuilder(args);
// Add a parameter named "example-parameter-name"
var parameter = builder.AddParameter("example-parameter-name");
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("ENVIRONMENT_VARIABLE_NAME", parameter);
Kode sebelumnya menambahkan parameter bernama example-parameter-name
ke host aplikasi. Parameter kemudian diteruskan ke proyek Projects.ApiService
sebagai variabel lingkungan bernama ENVIRONMENT_VARIABLE_NAME
.
Konfigurasikan nilai parameter
Menambahkan parameter ke pembangun hanyalah satu aspek konfigurasi. Anda juga harus memberikan nilai untuk parameter . Nilai dapat disediakan dalam file konfigurasi host aplikasi, diatur sebagai rahasia pengguna, atau dikonfigurasi dalam konfigurasi standar lainnya. Saat nilai parameter tidak ditemukan, pengguna akan diminta untuk memasukkannya saat menerbitkan aplikasi.
Pertimbangkan file konfigurasi host aplikasi berikut appsettings.json:
{
"Parameters": {
"example-parameter-name": "local-value"
}
}
JSON sebelumnya mengatur suatu parameter di bagian Parameters
dari konfigurasi host aplikasi. Dengan kata lain, host aplikasi tersebut dapat menemukan parameter sebagaimana dikonfigurasikan. Misalnya, Anda dapat berjalan ke IDistributedApplicationBuilder.Configuration dan mengakses nilai menggunakan kunci Parameters:example-parameter-name
:
var builder = DistributedApplication.CreateBuilder(args);
var key = $"Parameters:example-parameter-name";
var value = builder.Configuration[key]; // value = "local-value"
Penting
Namun, Anda tidak perlu mengakses nilai konfigurasi ini sendiri di host aplikasi. Sebagai gantinya, ParameterResource digunakan untuk meneruskan nilai parameter ke sumber daya dependen. Paling sering sebagai variabel lingkungan.
Representasi parameter dalam manifes
.NET
.NET Aspire menggunakan manifes penyebaran untuk mewakili sumber daya aplikasi dan hubungannya. Parameter diwakili dalam manifes sebagai primitif baru yang disebut parameter.v0
:
{
"resources": {
"example-parameter-name": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string"
}
}
}
}
}
Nilai rahasia
Parameter dapat digunakan untuk memodelkan rahasia. Ketika parameter ditandai sebagai rahasia, parameter berfungsi sebagai petunjuk untuk manifes bahwa nilai harus diperlakukan sebagai rahasia. Ketika Anda menerbitkan aplikasi, nilai akan diminta dan disimpan di lokasi yang aman. Saat Anda menjalankan aplikasi secara lokal, nilai dibaca dari bagian Parameters
konfigurasi host aplikasi.
Pertimbangkan contoh file host aplikasi Program.cs berikut:
var builder = DistributedApplication.CreateBuilder(args);
// Add a secret parameter named "secret"
var secret = builder.AddParameter("secret", secret: true);
builder.AddProject<Projects.ApiService>("api")
.WithEnvironment("SECRET", secret);
builder.Build().Run();
Sekarang pertimbangkan file konfigurasi host aplikasi berikut appsettings.json:
{
"Parameters": {
"secret": "local-secret"
}
}
Representasi manifes adalah sebagai berikut:
{
"resources": {
"value": {
"type": "parameter.v0",
"value": "{value.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
}
}
}
Nilai string sambungan
Parameter dapat digunakan untuk memodelkan string koneksi. Ketika Anda menerbitkan aplikasi, nilai akan diminta dan disimpan di lokasi yang aman. Saat Anda menjalankan aplikasi secara lokal, nilai dibaca dari bagian ConnectionStrings
konfigurasi host aplikasi.
Nota
String koneksi digunakan untuk mewakili berbagai informasi koneksi, termasuk koneksi database, broker pesan, URI titik akhir, dan layanan lainnya. Dalam nomenklatur .NET.NET Aspire, istilah "string koneksi" digunakan untuk mewakili segala jenis informasi koneksi.
Pertimbangkan contoh file host aplikasi Program.cs berikut:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddConnectionString("redis");
builder.AddProject<Projects.WebApplication>("api")
.WithReference(redis)
.WaitFor(redis);
builder.Build().Run();
Nota
Menggunakan WaitFor dengan string koneksi akan secara implisit menunggu sumber daya tempat string koneksi tersambung.
Sekarang pertimbangkan file konfigurasi host aplikasi berikut appsettings.json:
{
"ConnectionStrings": {
"redis": "local-connection-string"
}
}
Untuk informasi selengkapnya yang berkaitan dengan string koneksi dan representasinya dalam manifes penyebaran, lihat String koneksi dan referensi pengikatan.
Membangun string koneksi dengan ekspresi referensi
Jika Anda ingin membuat string koneksi dari parameter dan memastikan bahwa string tersebut ditangani dengan benar dalam pengembangan dan produksi, gunakan AddConnectionString dengan ReferenceExpression.
Misalnya, jika Anda memiliki parameter rahasia yang menyimpan sebagian kecil string koneksi, gunakan kode ini untuk menyisipkannya:
var secretKey = builder.AddParameter("secretkey", secret: true);
var connectionString = builder.AddConnectionString(
"composedconnectionstring",
ReferenceExpression.Create($"Endpoint=https://api.contoso.com/v1;Key={secretKey}"));
builder.AddProject<Projects.AspireReferenceExpressions_CatalogAPI>("catalogapi")
.WithReference(connectionString)
.WaitFor(connectionString);
Anda juga dapat menggunakan ekspresi referensi untuk menambahkan teks ke string koneksi yang dibuat oleh .NET.NET Aspire sumber daya. Misalnya, saat Anda menambahkan PostgreSQL sumber daya ke solusi Anda .NET Aspire , server database berjalan dalam kontainer dan string koneksi diformulasikan untuk itu. Dalam kode berikut, properti tambahan Include Error Details
ditambahkan ke string koneksi tersebut sebelum diteruskan ke proyek yang memanfaatkannya.
var postgres = builder.AddPostgres("postgres");
var database = postgres.AddDatabase("db");
var pgConnectionString = builder.AddConnectionString(
"pgdatabase",
ReferenceExpression.Create($"{database};Include Error Details=true"));
builder.AddProject<Projects.AspireReferenceExpressions_CustomerAPI>("customerapi")
.WithReference(pgConnectionString)
.WaitFor(pgConnectionString);
Contoh parameter
Untuk mengekspresikan parameter, pertimbangkan contoh kode berikut:
var builder = DistributedApplication.CreateBuilder(args);
var db = builder.AddSqlServer("sql")
.PublishAsConnectionString()
.AddDatabase("db");
var insertionRows = builder.AddParameter("insertionRows");
builder.AddProject<Projects.Parameters_ApiService>("api")
.WithEnvironment("InsertionRows", insertionRows)
.WithReference(db);
builder.Build().Run();
Langkah-langkah berikut dilakukan:
- Menambahkan sumber daya SQL Server bernama
sql
dan menerbitkannya sebagai string koneksi. - Menambahkan database bernama
db
. - Menambahkan parameter bernama
insertionRows
. - Menambahkan proyek bernama
api
dan mengaitkannya dengan parameter jenis sumber daya proyekProjects.Parameters_ApiService
. - Meneruskan parameter
insertionRows
ke proyekapi
. - Merujuk ke database
db
.
Nilai untuk parameter insertionRows
dibaca dari bagian Parameters
file konfigurasi host aplikasi appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
},
"Parameters": {
"insertionRows": "1"
}
}
Proyek Parameters_ApiService
menggunakan parameter insertionRows
. Pertimbangkan file contoh Program.cs:
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
int insertionRows = builder.Configuration.GetValue<int>("InsertionRows", 1);
builder.AddServiceDefaults();
builder.AddSqlServerDbContext<MyDbContext>("db");
var app = builder.Build();
app.MapGet("/", async (MyDbContext context) =>
{
// You wouldn't normally do this on every call,
// but doing it here just to make this simple.
context.Database.EnsureCreated();
for (var i = 0; i < insertionRows; i++)
{
var entry = new Entry();
await context.Entries.AddAsync(entry);
}
await context.SaveChangesAsync();
var entries = await context.Entries.ToListAsync();
return new
{
totalEntries = entries.Count,
entries
};
});
app.Run();
Lihat juga
.NET Aspire