跳至主要內容

基於 ASP.NET Core 6 開發的 Web API

Pamis Wang大约 2 分鐘後端ASP.NET CoreASP.NET Core 6API

WebAPI

基於 ASP.NETopen in new window 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.0open in new window

加入 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-twopen in new window

參考資料:https://github.com/dotnet/aspnet-api-versioning/wiki/Version-Format#custom-api-version-format-stringsopen in new window

參考資料:https://github.com/dotnet/aspnet-api-versioning/wiki/API-Explorer-Optionsopen in new window

加入 XML 註解

參考資料:https://docs.microsoft.com/zh-tw/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-6.0&tabs=visual-studioopen in new window

參考資料:https://blog.miniasp.com/post/2019/12/21/ASP․NET-Core-3-NSwag-OpenAPI-v3open in new window

參考資料:https://www.ais.com/self-documenting-azure-functions-with-c-and-openapi-part-two/open in new window

參考資料:https://bryanyu.github.io/2019/12/29/AspNetCoreSwagger/open in new window

參考資料:https://marcus116.blogspot.com/2019/01/how-to-add-api-document-using-swagger-in-webapi.htmlopen in new window

相依套件

MailKit -Version 3.2.0

上次編輯於:
貢獻者: EXMAIL\pamis,Pamis Wang,pamis