[ASP.NET WebAPI] #3 資料庫連線字串與環境設定:appsettings.json、Program.cs - antqtech/KM GitHub Wiki
AppSettings.json 和 Program.cs 是每個專案一開始自動生成的檔案。
AppSettings.json
AppSettings.json 是一個 JSON 格式的檔案,通常用來存放設定的地方,如資料庫連線字串
注意:可以透過 Microsoft.Extensions.Configuration
命名空間從應用程式中存取這些設定。
注意:應用程式設定可以存放在不同的設定來源中,如 appsettings.json
檔案、appsettings.{EnvironmentName}.json
檔案(其中 {EnvironmentName}
代表應用程式的當前運行環境,Development, Staging or Production)。
最常見的用途是設定資料庫連線字串:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"ConnectionStrings": {
"sqlconnect": "Server=XXX.XXX.XX.XX;Database=Stanec;uid=XXXXX;pwd=XXXXXXXXX;Trusted_Connection=False;TrustServerCertificate=true;MultipleActiveResultSets=true;"
},
"AllowedHosts": "*"
}
- Server -> 您的伺服器 IP
- Database -> 您的資料庫名稱
- Uid -> 您的使用者名稱
- Pwd -> 密碼
這個連線字串會在 Program.cs
中使用,每次運行程式時都會連接到資料庫。
Program.cs
Program.cs
檔案是應用程式的進入點。它是一個 C# 檔案,包含 Main
方法,這是應用程式的起始點。每次我們執行這個程式時,都會從這裡開始。
public static void Main()
作為起始點
namespace Stanec_API
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// 將服務加入容器
builder.Services.AddControllers();
// 了解更多關於配置 Swagger/OpenAPI 的資訊 https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddDbContext<StanecDbContext>(cnn => cnn.UseSqlServer(builder.Configuration.GetConnectionString("sqlconnect"))); // 加入連線字串
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(options => // 建立 swagger
{
// 使用 JWT 機制進行授權標頭(在 Swagger 中添加鎖定按鈕)
options.AddSecurityDefinition("Stanec",
new OpenApiSecurityScheme
{
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
Scheme = "Stanec",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Description = "JWT 授權"
});
options.AddSecurityRequirement(
new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Stanec"
}
},
new string[] {}
}
});
// 編輯 Swagger UI 描述
options.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Stanec",
Version = "v1",
Description = "這是一個 Stanec 數位名片的 Web API",
});
// 設定 Swagger XML 檔案路徑
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
});
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder
.WithOrigins("*") // 允許所有來源
.WithMethods("GET", "POST")
.AllowAnyHeader();
});
});
// 註冊服務以明確告訴 ASP.NET Core DI 容器如何創建服務實例
builder.Services.AddScoped<IEncryption, AesCryptoService>();
builder.Services.AddScoped<IEmailTemplate, EmailTemplateService>();
builder.Services.AddScoped<IGmail, GmailServices>();
builder.Services.AddScoped<IJwtAuthFilter, JwtAuthFilterService>();
builder.Services.AddScoped<IJwtAuthUtil, JwtAuthUtilService>();
var app = builder.Build();
string photoDirectory = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Photo");
if (!Directory.Exists(photoDirectory))
{
Directory.CreateDirectory(photoDirectory);
}
string[] subdirectories = { "ProfilePhoto", "BackgroundPhoto", "CompanyLogo" };
foreach (var subdir in subdirectories)
{
string subdirPath = System.IO.Path.Combine(photoDirectory, subdir);
if (!Directory.Exists(subdirPath))
{
Directory.CreateDirectory(subdirPath);
}
}
// 登記靜態檔案路徑
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(photoDirectory),
RequestPath = new PathString("/Photo"),
});
// 配置 HTTP 請求管道
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwaggerUI();
//}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors();
app.UseAuthorization();
app.MapControllers();
app.Run();
}
}
}
1. Main 方法與 WebApplication 建構器
這部分初始化了 web 應用程式建構, 我們還利用 appsettings.json
中的資料連接到資料庫。
2. Swagger 配置
這部分生辰了 Swagger 以用於 API 文件生成,並增加了 JWT 支援。在這部分中,我們還為 API 添加了註釋。
3. CORS 配置
設定這個web應用程式的請求來源, 叫做Cross-Origin Resource Sharing
4. 服務註冊
這部分將各種服務註冊到依賴注入(DI dependency injection)容器中。
5. 應用程式建構與目錄設置
在web應用程式建立了資料夾, 會去放靜態檔案
6. 靜態檔案配置
設定預設的靜態檔案地方 [1]
7. 其他
執行其他的必要的功能
簡化版的頂層語句 (Top Level Statements)
(預設的 Program.cs)
var builder = WebApplication.CreateBuilder(args);
// 將服務加入容器
builder.Services.AddControllers();
// 了解更多關於配置 Swagger/OpenAPI 的資訊 https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 配置 HTTP 請求管道
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
References
[1] https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-8.0