仅更改某些请求的HTTP头的内容-Angular2
在我的Angular2应用程序中,我添加了一个扩展的仅更改某些请求的HTTP头的内容-Angular2,angular,http,http-headers,http-post,Angular,Http,Http Headers,Http Post,在我的Angular2应用程序中,我添加了一个扩展的CustomRequestOptions类BaseRequestOptions,为发送到服务器的每个请求添加一些头。设置授权头的一个主要目的是设置授权头 import { Http, Response, Headers, BaseRequestOptions, RequestOptions, RequestOptionsArgs } from '@angular/http'; import { Globals } from '../global
CustomRequestOptions
类BaseRequestOptions
,为发送到服务器的每个请求添加一些头。设置授权头的一个主要目的是设置授权头
import { Http, Response, Headers, BaseRequestOptions, RequestOptions, RequestOptionsArgs } from '@angular/http';
import { Globals } from '../globals/globals';
import { Injectable } from '@angular/core';
@Injectable()
export class CustomRequestOptions extends BaseRequestOptions {
constructor(private _globals: Globals) {
super();
this.headers.set('Content-Type', 'application/json');
this.headers.set('X-Requested-By', 'Angular 2');
}
merge(options?: RequestOptionsArgs): RequestOptions {
var newOptions = super.merge(options);
let hdr = this._globals.getAuthorization();
newOptions.headers.set("Authorization", hdr);
console.log("content TYPE = "+this.headers.get("Content-Type"));
console.log("ACCepT = "+this.headers.get("Accept"));
return newOptions;
}
}
这完全符合我的要求
现在我遇到了一个需要上传照片到服务器。下面是我如何努力做到这一点
savePhoto(photoToSave: File) {
let formData: FormData = new FormData();
formData.append('uploadFile', photoToSave, photoToSave.name);
let headers = new Headers();
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers });
let savedPath = this._http
.post(this._endpointUrl + "tender/save-new/save-photo", formData, options)
.map(
res => {
return res.json();
}
)
.catch(handleError);
return savedPath;
}
如您所见,我需要将内容类型
标题更改为多部分/表单数据
。但是,定制请求选项类总是在请求通过时将其重置为application/json
我该怎么做?调用
CustomRequestOptions
类后,是否有任何方法可以设置自定义标题(“内容类型”、“多部分/表单数据”)?在CustomRequestOptions构造函数中,您正在调用super()
来设置您在savePhoto中提供的标题,然后用this.headers.set覆盖它('Content-Type','application/json');
为了解决这个问题,我建议先创建RequestOptions的实例,然后覆盖后面的标题。如下所示。(免责声明,我没有测试过这段代码)
此外,检查是否可以覆盖单个标题(如果希望保留值'X-Requested-By','Angular 2'
)
最后,检查
super()
是否可以移动到构造函数的最后一行(我非常怀疑),这样您就不会更改savePhoto()
实现。初始化类时只调用一次构造函数。正如我所知,merge是每次发出请求时调用的方法
savePhoto(photoToSave: File) {
let formData: FormData = new FormData();
formData.append('uploadFile', photoToSave, photoToSave.name);
let headers = new Headers();
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions();
options.headers = headers;
...
}