.NET Web API CORS 不适用于所有路由

Posted

技术标签:

【中文标题】.NET Web API CORS 不适用于所有路由【英文标题】:.NET Web API CORS not working for all routes 【发布时间】:2016-10-15 11:47:57 【问题描述】:

我有一个奇怪的问题,我无法找到答案。

我在我的 Web API 应用程序中多次使用 CORS 来允许来自客户端应用程序的跨域请求,而没有发现这个问题。

在我的 WebApiConfig 类中,我有:

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

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

        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);            
    

我有三个带有属性路由的控制器方法:

[HttpPost]
[Route("pedigree")]
public IHttpActionResult GetPedigree([FromBody]Input input)

    // some stuff    
    return Ok(result);


[HttpPost]
[Route("descendants")]
public IHttpActionResult GetDescendants([FromBody]Input input)

    // some stuff           
    return Ok(result);


[HttpPost]
[Route("relatives")]
public IHttpActionResult GetRelatives([FromBody]Input input)

    // some stuff            
    return Ok(person);

前两种方法工作正常并返回数据。第三个没有,它使 CORS 失败:

XMLHttpRequest 无法加载 http://localhost:21870/api/familysearch/relatives。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:8080' 不允许访问。响应的 HTTP 状态代码为 500。

我只是从 angular 为所有三种方法发出 ajax 请求:

$http.post('http://localhost:21870/api/familysearch/relatives', postData)
    .then(function (response) 
        // do something
    ).catch(function (e) 
        // do something
    );

有人有什么想法吗?

【问题讨论】:

也许这有帮助:***.com/questions/18619656/enable-cors-in-web-api-2。如果您已经解决了,请说明您是如何解决的。 【参考方案1】:

您需要在控制器类上添加 EnableCors 属性,以通过特定的 WebAPI Controller 启用 CORS。

[EnableCors("*", "*", "*")]

【讨论】:

感谢您的意见,我确实尝试过,但没有区别。无论如何,我的 webapiconfig 中的 enablecors 在所有控制器和方法中都应该是全局的。

以上是关于.NET Web API CORS 不适用于所有路由的主要内容,如果未能解决你的问题,请参考以下文章

CORS 不适用于 ASP NET 5 Web Api

Web Api 2 CORS 不适用于 POST

Cors 不适用于删除和放入 web api2

通过 Web.config 启用 CORS 不适用于 .net WebApi

CORS 不适用于 .NET Core API 和 Angular 前端

启用 CORS 不适用于 Spotify Web API [重复]