Cors 问题 API 不在同一台服务器上

Posted

技术标签:

【中文标题】Cors 问题 API 不在同一台服务器上【英文标题】:Cors issue API not on same server 【发布时间】:2016-04-04 19:25:36 【问题描述】:

我正在使用 Web API 2。在我的 WebApiConfig 中,我有这个。

   private static void EnableCrossSiteRequests(HttpConfiguration config)
    
        var origin = WebConfigurationManager.AppSettings["origin"];
        var cors = new EnableCorsAttribute(

            origins: "*",
            headers: "*",
            methods: "*");
        config.EnableCors(cors);
    

注册方法

        public static void Register(HttpConfiguration config)
    

        config.MapHttpAttributeRoutes();
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        EnableCrossSiteRequests(config);

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

根据我的理解,我不应该只需要这样做吗?当它们托管在一起时,它可以在我的开发计算机上运行。但现在一个在 Web 服务器上,而 API 在另一个 Web 服务器上。

我得到 - Origin ...在 Access-Control-Allow-Origin 标头中找不到。

我已将其设置为允许所有 Origin。我已经尝试将它添加到 web config 中,以及围绕 Stack overflow 发布的其他方法。我不明白为什么它被拒绝了?

前端是 Angular,使用 Ngresource 处理请求。

如果我在 chrome 开发工具中使用网络选项卡,对请求的响应是 200 OK,之后没有其他任何反应。整天都在寻找解决方案,到目前为止我尝试过的任何方法都没有奏效。

谢谢。

【问题讨论】:

在这里找到更多细节...asp.net/web-api/overview/security/… 【参考方案1】:

根据我的理解,我不应该只需要这样做吗?

不。您应该使用[EnableCors] 属性装饰您希望跨域调用的 Web API 控制器/操作:

[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
public class MyController: ApiController

    ...

这是关于此主题的good read

【讨论】:

我在 WebAiiConfig 文件的 Register 方法中启用了它。这应该在全球范围内启用它。我在很多地方读到过你如何在全球范围内启用 Cors。我编辑了我的原始帖子以显示它。 是的,我看到了你的帖子。现在尝试添加属性,如我对您的控制器的回答中所示。不要相信你读到的一切:-) 可以只做[EnableCors] 需要参数 对不起,是的,你是对的。您需要指定参数。我已经用文档中的示例更新了我的答案。 试过这个,[EnableCors(origins:"",headers:"",methods:"*")](允许所有)得到同样的错误:(

以上是关于Cors 问题 API 不在同一台服务器上的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在我们调用其余调用的同一台服务器上运行 Angular 应用程序也会出现 cors 问题

部署到服务器时出现 CORS 问题

如果两个网址都属于同一服务器,则 CORS 问题 [重复]

CORS Post 请求在本地工作但不在服务器上

CORS 允许所有在同一服务器上的不同端口在 JAVA 中

CORS - 没有 JSONP 的跨域 AJAX 通过允许服务器上的 Origin