API 从 Postman 工作,但从 Angular 发帖时出错
API working from Postman, but getting error when posting from Angular
我有一个 POST 我从 Postman 表演,效果很好,但是当我通过 Angular 发帖时,我得到:
[Error] XMLHttpRequest cannot load (DOMAIN) due to access control
checks.
在这里和 Google 上检查了几个答案后,我想到了更改 web.config 并表示启用 CORS。
NODE 应用程序托管在 IIS 上,我已经将 customHeaders 添加到 web.config:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
Angular 代码非常简单:
let APIURL = sessionStorage.getItem('endPoint') + "outside/login";
let options = { headers: new HttpHeaders().set('Content-Type', 'application/json') };
let body: any = this.payLoad;
this.httpClient.post(APIURL, JSON.stringify(body), options).subscribe(
result => {
.....
.....
.....
})
我也加了
app.options('*', cors())
到 Express 但仍然出现此错误。
当我在远程服务器上使用 IP 地址和端口 3000 时,这非常有效。当我通过 IIS 设置域并设置 URL 重写时,一切都崩溃了。
我想特别强调这一点:它在 Postman 上运行完美,但在应用程序(本地主机或网络服务器)上崩溃。
谢谢。
更新:停止 PM2 和停止 IIS 网站时,当然 Postman 不起作用,但 Angular 检索到相同的错误,所以我倾向于认为问题在 Angular 级别(?).
这是 IIS 的重写规则
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
</rule>
</rules>
</rewrite>
将此添加到您需要 express 的 js 文件中。我假设您需要 CORS。如果不是:
const cors = require('cors')
然后
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
并删除 web.config 中的 customHeaders。您正在设置 headers 两次。
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
我有一个 POST 我从 Postman 表演,效果很好,但是当我通过 Angular 发帖时,我得到:
[Error] XMLHttpRequest cannot load (DOMAIN) due to access control checks.
在这里和 Google 上检查了几个答案后,我想到了更改 web.config 并表示启用 CORS。
NODE 应用程序托管在 IIS 上,我已经将 customHeaders 添加到 web.config:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
Angular 代码非常简单:
let APIURL = sessionStorage.getItem('endPoint') + "outside/login";
let options = { headers: new HttpHeaders().set('Content-Type', 'application/json') };
let body: any = this.payLoad;
this.httpClient.post(APIURL, JSON.stringify(body), options).subscribe(
result => {
.....
.....
.....
})
我也加了
app.options('*', cors())
到 Express 但仍然出现此错误。
当我在远程服务器上使用 IP 地址和端口 3000 时,这非常有效。当我通过 IIS 设置域并设置 URL 重写时,一切都崩溃了。
我想特别强调这一点:它在 Postman 上运行完美,但在应用程序(本地主机或网络服务器)上崩溃。
谢谢。
更新:停止 PM2 和停止 IIS 网站时,当然 Postman 不起作用,但 Angular 检索到相同的错误,所以我倾向于认为问题在 Angular 级别(?).
这是 IIS 的重写规则
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:3000/{R:1}" />
</rule>
</rules>
</rewrite>
将此添加到您需要 express 的 js 文件中。我假设您需要 CORS。如果不是:
const cors = require('cors')
然后
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
并删除 web.config 中的 customHeaders。您正在设置 headers 两次。
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>