如何解决SOAP调用报错:服务器无法识别HTTP Header SOAPAction的值
SOAPAction不识别报错解决方案
客户端优先排查项
该类报错90%以上由客户端SOAPAction配置和服务端预期不匹配导致,先核对安卓端配置:
ASMX服务默认SOAPAction格式为 命名空间+方法名,命名空间末尾有无斜杠会直接导致匹配失败,你当前手写的SOAP_ACTION_LOGIN可能和服务端预期不一致,改为动态拼接避免手写错误:
// 替换原有SOAP_ACTION_LOGIN静态定义 public static String SOAP_ACTION_LOGIN = NAMESPACE + "/" + METHOD_NAME_LOGIN; // 若匹配失败,尝试去掉斜杠版本 // public static String SOAP_ACTION_LOGIN = NAMESPACE + METHOD_NAME_LOGIN;
修改后测试如果仍报错,再调整服务端配置。
服务端配置调整
1. 关闭SOAPAction校验(优先推荐,兼容性最好)
.NET Framework环境下,修改Web.config的<system.web>节点:
<system.web> <webServices> <protocols> <add name="HttpSoap"/> <add name="HttpPost"/> <add name="HttpGet"/> </protocols> </webServices> </system.web>
.NET Core/.NET 5+环境下,配置SOAP端点时关闭校验:
app.UseSoapEndpoint<MCGWS>("/MCG-WS.asmx", new SoapEncoderOptions(), validateSoapAction: false);
2. 显式指定方法SOAPAction
在WebService的对应方法上添加特性,指定和安卓端一致的SOAPAction值:
[WebService(Namespace = "https://api.example.com")] public class MCG_WS : WebService { [SoapDocumentMethod(Action = "https://api.example.com/LoginAPI")] [WebMethod] public string LoginAPI(string eposta, string parola) { // 业务逻辑 } }
3. 配置校验
配置完成后访问https://api.example.com/MCG-WS.asmx?op=LoginAPI,查看页面给出的SOAP请求示例中SOAPAction字段值,和客户端配置值保持一致即可。
内容的提问来源于stack exchange,提问作者technical
相关产品推荐
相关产品推荐

