在我的Angular2应用程序中,我使用CustomRequestOptions
类(其扩展BaseRequestOptions
)为每个请求设置标题值。有条件地使用RequestOptions向HTTP请求添加头文件
@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 {
// can I access the headers here I have set when the request is made ?
// and then conditionally set Content-Type
var newOptions = super.merge(options);
let hdr = this._globals.getAuthorization();
newOptions.headers.set("Authorization", hdr);
return newOptions;
}
}
如您所见,内容类型设置为application/json
。
现在我有要求将照片上传到服务器。只能为该请求清除内容类型。
我想用的方法是为请求设置一些标题值,在merge
方法内获取该值并有条件地清除内容类型标题。
设置自定义首部的请求被声明时: -
let formData: FormData = new FormData();
formData.append('file', photoToSave);
let headers = new Headers();
//setting a custom header
headers.append('from', 'photo-upload');
let options = new RequestOptions();
options.headers = headers;
let savedPath = this._http
.post(this._endpointUrl + "save-photo", formData, options)
.map(
res => {
return res.json();
}
)
.catch(handleError);
访问在合并方法所添加的报头。这是我遇到问题的地方。我可以做我想做的事吗? ?我试图以此为起点。但是被访问的头文件是空的。请参阅代码中的评论。
merge(options?: RequestOptionsArgs): RequestOptions {
console.log("options header = " + options.headers); //this prints null
console.log("options body = " + options.body);
var newOptions = super.merge(options);
if(from header equal to 'photo-upload'){
newOptions.headers.set('Content-Type', '');
}else{
newOptions.headers.set('Content-Type', 'application/json');
}
let hdr = this._globals.getAuthorization();
newOptions.headers.set("Authorization", hdr);
return newOptions;
}
现在我的问题是关于我想要做的事情的有效性。如果无效,请指出一条办法。谢谢..!