基於 ASP.NET Core 6 開發的 Web API
大约 2 分鐘
WebAPI
基於 ASP.NET Core 6 開發的 Web API
加入 跨來源資源共用(CORS)
讀取 appsettings.json 實作 跨來源資源共用
// 讀取允許列表
string[] corsOrigins = appsettings.GetSection("CORS:AllowOrigins").Get<string[]>();
// 加入具有預設原則的 CORS 和中介軟體
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(
policy =>
{
if (corsOrigins.Contains("localhost"))
{
policy.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost");
}
else
{
policy.WithOrigins(corsOrigins);
}
policy.AllowAnyHeader();
policy.AllowAnyMethod();
policy.AllowCredentials();
});
});
參考資料:https://docs.microsoft.com/zh-tw/aspnet/core/security/cors?view=aspnetcore-6.0
加入 API 多版本控制 整合 Swagger
透過 Nuget 加入 相依套件
Microsoft.AspNetCore.Mvc.Versioning
Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
註冊並加入服務
參考以下程式碼區塊,加入於 Program.cs
// 加入 API 版本控制
builder.Services.AddApiVersioning(option =>
{
// 返回響應標頭中支援的版本資訊
option.ReportApiVersions = true;
// 未提供版本請請時,使用預設版號
option.AssumeDefaultVersionWhenUnspecified = true;
// 預設 API 版本號,支援時間或數字版本號
option.DefaultApiVersion = new ApiVersion(1, 0);
});
// 加入 API 版本控制,並定義了版本號碼的格式,以及兼容 SwaggerEndpoint 加入版本號的方式
builder.Services.AddVersionedApiExplorer(option =>
{
// 加入版本化的 API Explorer,其中也加入了 IApiVersionDescriptionProvider 服務
// 格式可參考 https://github.com/dotnet/aspnet-api-versioning/wiki/ Version-Format#custom-api-version-format-strings
option.GroupNameFormat = "'v'VVV";
option.SubstituteApiVersionInUrl = true;
});
// 將 Swagger 產生器新增至 中的 Program.cs 服務集合
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(options =>
{
//使用 類別 OpenApiInfo ,修改 UI 中顯示的資訊,定義多個版本的 API 資訊,Version 需要和 SwaggerEndpoint 對應
options.SwaggerDoc("v1", new OpenApiInfo { Title = "Pamis API - V1", Version = "v1" });
options.SwaggerDoc("v2", new OpenApiInfo { Title = "Pamis API - V2", Version = "v2" });
});
// 註冊 Swagger 中介軟體(Middleware) 並注入 DI 容器
// 啟用中介軟體來提供產生的 JSON 檔和 Swagger UI
app.UseSwagger();
app.UseSwaggerUI(options =>
{
// SwaggerEndPoint 方法用於告訴SwaggerUI 請求哪個地址來獲取OpenApi JSON 資訊
// 設定 Swagger UI 訪問 JSON 的位置,Version 需要和 SwaggerEndpoint 對應
options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
options.SwaggerEndpoint("/swagger/v2/swagger.json", "v2");
});
// 啟用 API 版本控制 中介軟體 (Middleware)
app.UseApiVersioning();
測試用 Controllers
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace WebAPI.Controllers
{
[ApiVersion("1")]
[ApiVersion("2")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
[MapToApiVersion("1")]
public string GetV1()
{
return "v1";
}
[HttpGet]
[MapToApiVersion("2")]
public string GetV2()
{
return "v2";
}
}
}
參考資料:https://www.gushiciku.cn/pl/gaDe/zh-tw
參考資料:https://github.com/dotnet/aspnet-api-versioning/wiki/API-Explorer-Options
加入 XML 註解
參考資料:https://blog.miniasp.com/post/2019/12/21/ASP․NET-Core-3-NSwag-OpenAPI-v3
參考資料:https://www.ais.com/self-documenting-azure-functions-with-c-and-openapi-part-two/
參考資料:https://bryanyu.github.io/2019/12/29/AspNetCoreSwagger/
參考資料:https://marcus116.blogspot.com/2019/01/how-to-add-api-document-using-swagger-in-webapi.html
相依套件
MailKit -Version 3.2.0