呼叫播放2 REST API与AngularJS(CORS问题)(Call Play 2 REST

2019-10-19 10:07发布

我正在开发一个AngularJS应用程序中调用与播放框架2.2.0开发的REST API。

我有相关的跨域Ajax调用的角应用程序和玩一会不在同一个站点上托管的问题。

这里是JS调用在我的角度服务:

    $http
        .post("http://localhost:9001/category/list", { langCode: 'fr-FR' })
        .success(function(data, status, headers, config) {
            callback(data.items);
        })
        .error(function(data, status, headers, config) {
            console.log("Error Data : " + data);
            console.log("Error Status : " + status);
        });

这里是我的播放应用程序的路径:

POST /category/list controllers.catalog.ProductCategoryController.list()

  • 如果我不请求发送任何数据,一切工作正常
  • 如果我发送数据时,我有一个关于ACCESS_CONTROL_ALLOW_ORIGIN阿贾克斯错误,ACCESS_CONTROL_ALLOW_HEADERS

我唯一的解决方法如下:

  • 拦截全球一流的所有请求,并添加页眉

    @Override public Action onRequest(Request request, Method method) { return new Action.Simple() { @Override public Promise<SimpleResult> call(Context ctx) throws Throwable { Logger.debug("Intercepting request and applying CORS headers..."); ctx.response().setHeader(Controller.ACCESS_CONTROL_ALLOW_ORIGIN, "*"); ctx.response().setHeader(Controller.ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type"); return delegate.call(ctx); } }; }

  • 添加另一条路线,在路线选项

OPTIONS /category/list controllers.catalog.ProductCategoryController.list()

有没有使集成比简单的一种方式?

Answer 1:

有没有CORS支持出戏箱; 这就是我想看到改变的情况,但现在你已经确定了一个疣。

好消息是, 如果你是指有你所有的资源之一CORS设定OK,你可以管理一个全球性的解决办法。 它可以在几个方面,其中之一,你确定要做。 我倾向于将去一个低级别选项的路线。

就像是:

OPTIONS        /*path                         controllers.Application.options()

从那里,你的处理程序定义可以是这样的:

Ok("").withHeaders(
      "ACCESS_CONTROL_ALLOW_METHODS" -> "GET, POST, PUT, PATCH",
      "ACCESS_CONTROL_ALLOW_HEADERS"->"Content-Type", 
      "ACCESS_CONTROL_ALLOW_ORIGIN" -> "*"
)

这不是超级干净,但直到游戏增加了一些更可行的,我认为这是在做OPTIONS航线吨您最好的选择(同样,假设你舒适与全球CORS设定)



Answer 2:

你必须让你玩网页服务器CORS支持。 以下网址也有足够的操作方法用于配置服务器启用跨源支持:

http://enable-cors.org/server.html



文章来源: Call Play 2 REST API with AngularJS (CORS Problems)