mvc 跨網域要求 cors Reference

Nuget 載入 Microsoft.AspNet.WebApi.Cors
Architecture

Enable CORS
Architecture

全域

Architecture

區域

Controller

Architecture

Action

Architecture

Disable CORS

區域

Controller

Architecture

Action

Architecture

Custom Handle

Add CorsHandle.cs

public class CorsHandle : Attribute, ICorsPolicyProvider
{
    private CorsPolicy corsPolicy;

    public CorsHandle()
    {
        this.corsPolicy = new CorsPolicy
        {
            AllowAnyHeader = true,
            AllowAnyMethod = true
        };

        this.corsPolicy.Origins.Add("http://localhost");
        this.corsPolicy.Origins.Add("http://www.google.com");
    }

    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        => Task.FromResult(this.corsPolicy);
}

Add CorsOnActionHandle.cs

public class CorsOnActionHandle : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        List<string> allowDomain = new List<string>()
        {
            "http://localhost",
            "http://www.google.com"
        };

        string origin = actionContext.Request.Headers.GetValues("Origin").FirstOrDefault();

        bool isAllow = allowDomain.Contains(origin);

        if (!isAllow)
        {
            UnauthorizedObject result = new UnauthorizedObject()
            {
                code = "401",
                message = "domain is not allow"
            };

            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized, result);
        }
    }

    public class UnauthorizedObject
    {
        public string code { get; set; }
        public string message { get; set; }
    }
}

Modify Controller or Action filter

Architecture

Reference

Enable cross-origin requests in ASP.NET Web API 2