В настоящее время я пытаюсь получить доступ к API с помощью приложения Angular 2 (через Ionic 2). Наш сервер laravel настроен таким образом, что он ожидает заголовок Accept с типом содержимого запроса и заголовком Content-Type. Не только пустой заголовок Content-Type, но и нет.Как я могу сказать, что Angular 2 автоматически прекратил настройку заголовков Content-Type?
Итак, я настраиваю необходимые параметры в Http, опуская Content-Type в заголовках, и вот тут проблема: Угловая 2, по-видимому, не может удержать руки от Content-Type. Если я дам ему объект как тело запроса, он устанавливает Content-Type в application/json. Это все еще понятно. Затем я строю объект, который вызывает Угловое, чтобы установить Content-Type в text/plain. Попытки через
headers = new Header({Accept: 'application/json', Content-Type: undefined});
или
headers.append("Content-Type", undefined);
или любую другую комбинацию любого заголовка я мог себе представить, что содержит Accept приложения/JSON и ничего другого, даже headers.set или headers.delete терпит неудачу, Угловая 2 продолжает просто делать свое дело.
Установка содержимого-типа в undefined была предложена в другом месте, я также попытался установить его в пустую строку, в application/json при передаче в строчном JSON, Angular просто не дает летающего f ... о что я хочу. Есть ли способ отключить этот автоматизм? Я все еще делаю что-то неправильно (я импортирую заголовки, которые, например, их отсутствие, были проблемой в другом месте, так что это должно быть отключено)?
вот код:
import { Injectable, Inject } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import { ConfsService } from '../confs/confs.service';
import { ApiRequestBody } from './api.request.body';
@Injectable()
export class ApiService {
constructor(public confs: ConfsService, private apiRequestBody: ApiRequestBody, private http: Http) {
post (method: string, data: any):Promise<any> {
const api = this.confs.get().api;
const url = api['server'] + "" + api[method];
let allParams = this.apiRequestBody.toJSON(data);
let body = JSON.stringify(allParams);
let headers = new Headers({
'Accept': 'application/json',
'Content-Type': undefined,
});
let options = new RequestOptions({ headers: headers });
let obj = this.http.post(url, body, options).toPromise();
return obj;
}
}
ConfsService просто получает несколько параметров конфигурации, ака URL сервера API, и ApiRequestBody получает услугу, которая создает стандартный набор параметров, которые API необходимо даже посмотрите на запрос, в дополнение к тем, которые передаются через параметр данных (который затем сливается с стандартными параметрами в методе toJSON) - никакой науки о ракетах. И я делаю toPromise(), потому что я считаю, что обещание в этом конкретном случае легче обрабатывать.
Есть пара хороших ресурсов на StackOverflow относительно первостепенных/удаления HTTP заголовков в угловых 2 - поиск для них. Это первый, который я нашел: [Как установить HTTP-заголовок по умолчанию в Angular2?] (Http: // stackoverflow.com/questions/34969292/how-to-set-default-http-header-in-angular2) – Adam
спасибо, что указали, что вне этого, проверит его позже – yogibimbi