【发布时间】:2018-09-13 04:43:32
【问题描述】:
我有以下服务;无论我如何配置它,我都无法让 http 请求正常工作。
Chrome 控制台错误
Response for preflight has invalid HTTP status code 400.
我的服务
import { Injectable } from '@angular/core';
import { Http, RequestOptions, Response, Headers } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable()
export class SlackService {
extractData(res: Response) {
let body = res.json();
return body || {};
}
handleError (error: Response | any) {
console.error(error.message || error);
return Promise.reject(error.message || error);
}
private url: string = 'https://hooks.slack.com/services/xxx/xxx/xxx';
constructor(private http: Http) {}
public slack(data: any): Observable<{}> {
let body = JSON.stringify(data);
let headers: Headers = new Headers();
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, body, options)
.map(this.extractData)
.catch(this.handleError);
}
}
我记得在 AngularJS 中遇到过这个问题,下面修复了它... angular 2+ 中的等价物是什么?
app.config(function ($httpProvider) {
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
});
我见过Angular 2 Token: Response for preflight has invalid HTTP status code 400 这样的答案,但没有帮助
这在 PostMan 中有效
curl -X POST \
https://hooks.slack.com/services/xx/xx/xx \
-H 'content-type: application/x-www-form-urlencoded' \
-d payload=%7B%0A%20%20%20%20%20%20%22channel%22%3A%20%22%23general%22%2C%0A%20%20%20%20%20%20%22username%22%3A%20%22webhookbot%22%2C%0A%20%20%20%20%20%20%22text%22%3A%20%22This%20is%20posted%20to%20%23general%20and%20comes%20from%20a%20bot%20named%20webhookbot.%22%2C%0A%20%20%20%20%20%20%22icon_emoji%22%3A%20%22%3Aghost%3A%22%0A%20%20%20%7D
【问题讨论】:
-
也许可以查看 slacks api 文档以了解调用所需的标头。
-
@floor 我编辑了这个问题以包含一个关于现在工作的 sn-p
标签: javascript angular typescript http-headers