Cấu hình CORS trong ASP.NET Web API và MVC

1. Cấu hình CORS cho ASP.NET Web API

Đầu tiên, cài đặt gói NuGet cần thiết:

Install-Package Microsoft.AspNet.WebApi.Cors

Sau đó, cấu hình trong lớp WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var allowedOrigins = ConfigurationManager.AppSettings["AllowedCorsOrigins"];
        if (!string.IsNullOrEmpty(allowedOrigins))
        {
            var corsPolicy = new EnableCorsAttribute(
                origins: allowedOrigins,
                headers: "*",
                methods: "*")
            {
                SupportsCredentials = true,
                PreflightMaxAge = 1200 // 20 phút
            };
            config.EnableCors(corsPolicy);
        }

        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Trong file web.config, thêm danh sách các origin được phép truy cập:

<appSettings>
    <add key="AllowedCorsOrigins" value="http://192.168.9.8:9527,http://192.168.9.176:9528,http://192.168.9.246:9529" />
</appSettings>

2. Xử lý CORS trong ứng dụng ASP.NET MVC/Web API không dùng WebApi.Cors

Trong file Global.asax.cs, xử lý yêu cầu OPTIONS (preflight):

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.HttpMethod == "OPTIONS")
    {
        Response.AddHeader("Access-Control-Allow-Origin", "*");
        Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        Response.AddHeader("Access-Control-Max-Age", "1728000");
        Response.End();
    }
    else
    {
        Response.AddHeader("Access-Control-Allow-Origin", "*");
    }
}

Bổ sung header CORS trong web.config:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      <add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Lưu ý: Nếu triển khai trên IIS, ứng dụng phải sử dụng chế độ pipeline Classic thay vì Integrated để đảm bảo các header CORS được áp dụng đúng cách.

Thẻ: asp.net CORS webapi MVC IIS

Đăng vào ngày 18 tháng 6 lúc 16:11