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 不在同一台服务器上的主要内容,如果未能解决你的问题,请参考以下文章