(精華)2020年7月1日 ASP.NET Core 解決跨域問題(手寫版)

愚公搬程式碼發表於2020-07-01
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace Core.Api
{
    /// <summary>
    /// 跨域中介軟體
    /// </summary>
    public class CorsMiddleware
    {
        private readonly RequestDelegate _next;

        /// <summary>
        /// 管道執行到該中介軟體時候下一個中介軟體的RequestDelegate請求委託,如果有其它引數,也同樣通過注入的方式獲得
        /// </summary>
        /// <param name="next">下一個處理者</param>
        public CorsMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        /// <summary>
        /// 自定義中介軟體要執行的邏輯
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            context.Response.Headers.Add("Access-Control-Allow-Headers", context.Request.Headers["Access-Control-Request-Headers"]);
            context.Response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");

            //若為OPTIONS跨域請求則直接返回,不進入後續管道
            if (context.Request.Method.ToUpper() != "OPTIONS")
                await _next(context);//把context傳進去執行下一個中介軟體
        }
    }
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMiddleware<CorsMiddleware>()//跨域
}

相關文章