服务器无法为请求提供服务,因为媒体类型不受支持 Soap Nodejs
The server cannot service the request because the media type is unsupported Soap Nodejs
我已经在 nodejs 中使用使用 wsdl 项目的库 "soap" 构建并 api。
我正在尝试执行 post,但在响应正文中收到此错误:服务器无法为请求提供服务,因为媒体类型不受支持;同样在响应正文中,我收到了这条消息:无法处理消息,因为内容类型 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml;字符集=utf-8。我做了一些研究,发现这是服务器和客户端之间的 soap 版本问题。
我试试这个:
- 创建 soap 客户端时添加了 forceSoap12Headers:false 和 viceverse
- 将带有接受内容和内容类型的 soap 库重写为:text/xml; charset=utf-8,也改变属于soap v1.1
的所有方案
- 尝试在请求中添加 httpHeader 'Accept' 'text/xml'
这是我的代码的一部分:
MethodTest: async function(wsdl){
try{
var client = soap.createClient(wsdl,{forceSoap12Headers:false},async (err,result)=>{
if(err){
}else{
var descripcion = await this.ServiceDescription(wsdl);
if(!descripcion.error){
var body = { _xml: "<i0:GetAccountBalance>"+
"<i0:dc>"+
"<i0:RequestId>000</i0:RequestId>"+
"<i0:SystemId>WEB</i0:SystemId>"+
"<i0:SourceId>AR</i0:SourceId>"+
"<i0:AccountNumber>42526372</i0:AccountNumber>"+
"</i0:dc>"+
"<i0:dcSecurity>"+
"<i0:WebUser>NDsVwQwRbwbuY / DcX2PRGw ==</i0:WebUser>"+
"<i0:WebPassword>/d8zOcR9K9xqpl8CdhUJrw==</i0:WebPassword>"+
"</i0:dcSecurity>"+
"</i0:GetAccountBalance>"}
try{
var response = await (result[descripcion.metodos[8]+"Async"])(body)
}catch (e){
console.log(e.response)
}
}
}
})
我找到了。我有两个问题,在创建客户端服务时,默认端点设置错误并且需要 Content-Type application/soap+xml;字符集=utf-8。我只是覆盖了端点,请求成功了!!
这是我修复错误的方法。首先转到 Headers:然后,如果您可以在现场更改默认的 content-type 值,从 application/xml 到 text/xml,请先尝试对其进行编辑。如果不取消选中 content-type 复选框,并在底部的同一列中,只需键入 content-type 键和 text/xml 值。然后就完美了!!!
对我来说,
- 我去了headers,deselect了原来的Content-type
- 然后转到预设,点击管理预设
- 在那里,我点击了添加,然后在弹出窗口中
一种。选择一个 Header 预设名称(任何名称都可以)
b.对于密钥——输入 Content-type
C。对于值——输入 text/xml
d.最后点击右下角添加
- 关闭管理预设弹出窗口
- 单击您的新预设,然后 select 底部的新 Content-type
我已经在 nodejs 中使用使用 wsdl 项目的库 "soap" 构建并 api。
我正在尝试执行 post,但在响应正文中收到此错误:服务器无法为请求提供服务,因为媒体类型不受支持;同样在响应正文中,我收到了这条消息:无法处理消息,因为内容类型 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml;字符集=utf-8。我做了一些研究,发现这是服务器和客户端之间的 soap 版本问题。
我试试这个:
- 创建 soap 客户端时添加了 forceSoap12Headers:false 和 viceverse
- 将带有接受内容和内容类型的 soap 库重写为:text/xml; charset=utf-8,也改变属于soap v1.1 的所有方案
- 尝试在请求中添加 httpHeader 'Accept' 'text/xml'
这是我的代码的一部分:
MethodTest: async function(wsdl){
try{
var client = soap.createClient(wsdl,{forceSoap12Headers:false},async (err,result)=>{
if(err){
}else{
var descripcion = await this.ServiceDescription(wsdl);
if(!descripcion.error){
var body = { _xml: "<i0:GetAccountBalance>"+
"<i0:dc>"+
"<i0:RequestId>000</i0:RequestId>"+
"<i0:SystemId>WEB</i0:SystemId>"+
"<i0:SourceId>AR</i0:SourceId>"+
"<i0:AccountNumber>42526372</i0:AccountNumber>"+
"</i0:dc>"+
"<i0:dcSecurity>"+
"<i0:WebUser>NDsVwQwRbwbuY / DcX2PRGw ==</i0:WebUser>"+
"<i0:WebPassword>/d8zOcR9K9xqpl8CdhUJrw==</i0:WebPassword>"+
"</i0:dcSecurity>"+
"</i0:GetAccountBalance>"}
try{
var response = await (result[descripcion.metodos[8]+"Async"])(body)
}catch (e){
console.log(e.response)
}
}
}
})
我找到了。我有两个问题,在创建客户端服务时,默认端点设置错误并且需要 Content-Type application/soap+xml;字符集=utf-8。我只是覆盖了端点,请求成功了!!
这是我修复错误的方法。首先转到 Headers:然后,如果您可以在现场更改默认的 content-type 值,从 application/xml 到 text/xml,请先尝试对其进行编辑。如果不取消选中 content-type 复选框,并在底部的同一列中,只需键入 content-type 键和 text/xml 值。然后就完美了!!!
对我来说,
- 我去了headers,deselect了原来的Content-type
- 然后转到预设,点击管理预设
- 在那里,我点击了添加,然后在弹出窗口中
一种。选择一个 Header 预设名称(任何名称都可以)
b.对于密钥——输入 Content-type
C。对于值——输入 text/xml
d.最后点击右下角添加 - 关闭管理预设弹出窗口
- 单击您的新预设,然后 select 底部的新 Content-type