Angular PUT 发送选项,仅此而已

问题描述 投票:0回答:1

所以我有一个 Angular 应用程序,它对 REST api 进行不同的调用,以获取、发布按预期工作,它们不会发送任何选项预检,但说到放置它就是地狱,我在谷歌上找不到答案,我已经尝试过每一个标题。此时我只是认为 PUT 不是一个真正的请求...我真的很绝望。

这就是我在我的角度应用程序中拨打电话的方式:

    Connect = function(){
    console.log("dbConnect");
    let options = new RequestOptions({ withCredentials: true });
    this._http.get('http://localhost:443/some/Connect', options)
        .subscribe();
}

Read = function(){
    console.log("Read");
    let options = new RequestOptions({ withCredentials: true });
    this._http.post('http://localhost:443/some/Read','', options)
        .subscribe(); 
}

Create = function(){
    console.log("Create");
    let data = '{...}';
    this._http.put('http://localhost:443/some/Create',data) 
        .subscribe(); <- only sends option
}

我已经在我的服务器上设置了我可以设置的每个标头。

Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Headers: X-Requested-With
    Access-Control-Allow-Headers: Content-Type
    Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT 
    Access-Control-Max-Age: 86400

我在实际请求中尝试了不同的标头,例如:

let headers = new Headers();
headers.append("Content-Type", "application/json");
headers.append("Authorization",btoa("user:pass"));

无论我尝试什么,它都只是发送选项,仅此而已。为什么它不为 POST 和 GET 执行此操作?我真的不知道我在这上面花了太多时间,我在谷歌上确实没有找到关于如何进行这项工作的明确解释。我知道必须有一个预检,但即使我用你想要的任何标头回答,它也不会做任何其他事情...而且我可以看到,当我按 F12 时,我回答的标头在响应中,但有角度只是根本不在乎。

有什么想法可以让我的 PUT 工作吗?

这是我将本地主机通信到本地主机(不同的端口)。我尝试在 Firefox 上使用插件“cors Everywhere”,但是禁用该插件仍然有效,因为我允许我的服务器端的客户端端口。无论有没有corse,一切都可以工作,只是 PUT 方法不起作用..请帮忙

编辑答案

如果您遇到同样的问题:对我来说,解决的方法是如果请求是选项,则不在服务器端设置领域。

angular http cors put
1个回答
0
投票

我也有同样的问题。就我而言,我使用的是节点服务器。添加插件也会有帮助,但我想这不是真正的方法。

我将以下几行添加到我的服务器代码中:

res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
© www.soinside.com 2019 - 2024. All rights reserved.