在ASP.NET Web API中实现CORS(跨域资源共享)

时间:2021-10-16 18:00:32

默认情况下,是不允许网页从不同的域访问服务器资源的,访问遵循"同源"策略的原则。

会遇到如下的报错:

XMLHttpRequest cannot load http://localhost:49705//api/products. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:49729' is therefore not allowed access.

初始或源域名是:http://localhost:49729/
请求产品的域名是:http://localhost:49705//api/products

由于端口号不一致,所以,在"同源"策略下,服务器资源是被禁止访问的,会报错。

ASP.NET Web API为我们提供了实现CORS(跨域资源共享)的解决方案。

首先通过NuGet安装:microsoft asp.ent web api 202 cross-origin support

在WebConfig类中配置如下:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
... // Web API 路由
config.MapHttpAttributeRoutes(); //全局允许CROS
config.EnableCors(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); }
}

在ApiController上设置CROS属性。

[EnableCorsAttribute("http://localhost:49729","*","*")]
public class ProductsController : ApiController
{
...
}

以上就实现了在ASP.NET Web API中的CROS。