如下有body体的POST jQ请求,在Angular里怎么写?
一. jQ写法(调用成功)
function myFunction(){
$.ajax({
url : 'http://124.11.11.11:63192/api/3.8/auth/signin',
headers: {'content-type': 'text/xml'},
data:'<tsRequest>' + '<credentials name="admin" password="ABC@2121" >' +
'<site contentUrl=""/>' + '</credentials>' + '</tsRequest>',
type : 'post',
crossDomain: true,
async : false,
cache : false,
success : function (res){
console.log('成功');
}
});
}
二.Angular写法:(调用失败)
const defaultParams =
'<tsRequest>' + '<credentials name="admin" password="ABC@2021" >' +
'<site contentUrl=""/>' + '</credentials>' + '</tsRequest>'
export class SingerService {
constructor(
private http: HttpClient,
@Inject(API_CONFIG_TABLEAU) private uri_tableau: string,
) { }
getToken(args = defaultParams): Observable<any> {
const params = new HttpParams({ fromString: queryString.stringify(args) });
return this.http.post(
this.uri_tableau + 'api/3.8/auth/signin',
{ params }).pipe(map(res => console.log(res))
);
}
三.错误提示如下:
错误要点:400 Bad Request","error":{"error":{"summary":"错误请求","detail":"Deserialization problem: Unrecognized field \"headers\" (class com.tableausoftware.api.rest.viewmodels.TsRequest), not marked as ignorable (35 known properties:
错误全部:
四.修改Angular版本(报错相同):
getToken(): Observable<any> {
const headers = new HttpHeaders({responseType: 'text' , 'Content-Type': 'text/xml' }).set('Accept', 'text/xml');
let body = '<tsRequest>' +
'<credentials name="admin" password="DHC@2020" >' +
'<site contentUrl=""/>' +
'</credentials>' +
'</tsRequest>';
const hdr = {headers:headers , body:body};
return this.http.post(this.uri_tableau + 'api/3.8/auth/signin', hdr)
.pipe(map(res => console.log(res)));
}
jQuery 请求 body 体截图:
Angular 请求 body 体截图:
【======================================================】
修改后:
const headers = new HttpHeaders({responseType: 'text' , 'Content-Type': 'text/xml' }).set('Accept', 'text/xml');
const body = '<tsRequest>' +
'<credentials name="admin" password="DHC@2020" >' +
'<site contentUrl=""/>' +
'</credentials>' +
'</tsRequest>';
const hdr = { headers };
return this.http.post(this.uri_tableau + 'api/3.8/auth/signin', body, hdr)
.pipe(map(res => console.log(res)));
修改后报错如下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你 httpClient.post 参数传递错了吧。
post(url,body,options) request header 在 options 里设置。
https://angular.io/api/common...
更新,
你的 responseType 不能写到 request header 里,你服务器不认这个,不在跨域允许的 header 范围内。
HttpClient.post的原型是这样的:
post方法有三个参数,body和headers不要放在一起