WebApi 5.2.3中针对特定apicontroller的EnableCors失败

sks*_*laj 5 c# cors asp.net-web-api

因此,我遵循了以下教程:

他们每个人都描述了为控制器启用EnableCors的方法,也可以按全局添加。

我遵循了所有这三个步骤中概述的步骤,在我的App_Start / WebApiConfig.cs文件中输入了以下内容:

public static void Register(HttpConfiguration config)
{
    config.EnableCors();
    config.Routes.MapHttpRoute(
        name: "Default",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { controller = "", action = "Get" }
    );
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我添加了:

[EnableCors(origins: "http://localhost:50247", headers: "*", methods: "*")] 
public class TestController : ApiController
{ ... }
Run Code Online (Sandbox Code Playgroud)

但是当我去运行程序时,它给了我以下错误:

XMLHttpRequest无法加载http:// localhost:49705 / api / Test / GetTestData。所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源' http:// localhost:50247 '。

但是,当我在App_Start / WebApiConfig.cs中添加以下内容以使EnableCors遍及整个应用程序时:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    var cors = new EnableCorsAttribute(
            origins: "*",
            headers: "*",
            methods: "*");
    config.EnableCors(cors);
     // Web API routes
    config.MapHttpAttributeRoutes();
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}
Run Code Online (Sandbox Code Playgroud)

有效。但是如果使我的api控制器上经过修饰的EnableCors属性无效。

当我从apicontroller中删除[EnableCors]属性时:

public class TestController : ApiController
{ ... }
Run Code Online (Sandbox Code Playgroud)

因为我在全球范围内所做的工作,所以它奏效了。为什么会发生这种情况?从webapi 5.2.2升级到5.2.3时是否发生错误?

该项目是Visual Studio 2013中使用asp.net webapi启动模板创建的新项目。