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.