我正在尝试使用C#构建一个肥皂信封;我收到错误:添加标题时“指定的值具有无效的HTTP标头字符。参数名称:名称”。 当我使用立即窗口检查BuildSoapHeader()的输出时,我仍然看到转义序列“\”文字,我想知道这是否是问题或者是否是其他问题。
请帮忙!
WebRequest webRequest = WebRequest.Create(this._fiserveURI);
HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
httpRequest.Method = "POST";
httpRequest.ContentType = "text/xml; charset=utf-8";
httpRequest.Headers.Add(this.BuildSoapHeader());
...
private string BuildSoapHeader()
{
StringBuilder retValue = new StringBuilder("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" ");
retValue.Append("xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" ");
retValue.Append("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
retValue.Append("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> ");
retValue.Append("<SOAP-ENV:Header>");
retValue.Append("<m:PI00WEBSOperationRequest_header xmlns:m=\"http://www.FiservLSP.RequestHeader.com\">");
retValue.Append("<m:LSPHeader>");
retValue.Append("<m:Service>");
retValue.Append("<m:DateTime>" + DateTime.Now.ToString() + "</m:DateTime>");
retValue.Append("<m:uuid>" + this._fiserveUUID +"</m:uuid>");
retValue.Append("</m:Service>");
retValue.Append("<m:Security>");
retValue.Append("<m:AuthenticationMaterial>");
retValue.Append("<m:PrincipalPWD>" + this._fiservePrincipalPWD + "</m:PrincipalPWD>");
retValue.Append("<m:PrincipalID>"+ this._fiservePrincipalID +"</m:PrincipalID>");
retValue.Append("</m:AuthenticationMaterial>");
retValue.Append("</m:Security>");
retValue.Append("<m:Client>");
retValue.Append("<m:VendorID>" + this._fiserveVendorID + "</m:VendorID>");
retValue.Append("<m:AppID>" + this._fiserveAppID + "</m:AppID>");
retValue.Append("<m:OrgID>" + this._fiserveOrgID + "</m:OrgID>");
retValue.Append("<m:SessionID>" + this._fiserveSessionID + "</m:SessionID>");
retValue.Append("</m:Client>");
retValue.Append("<m:DataSource>");
retValue.Append("<m:URI>" + this._fiserveURI + "</m:URI>");
retValue.Append("</m:DataSource>");
retValue.Append("</m:LSPHeader>");
retValue.Append("</m:PI00WEBSOperationRequest_header>");
retValue.Append("</SOAP-ENV:Header>");
//retValue.Append("<SOAP-ENV:Body></SOAP-ENV:Body>");
retValue.Append("</SOAP-ENV:Envelope>");
return retValue.ToString();
}
答案 0 :(得分:0)
您的字符串可能采用HeaderName: Value
格式,因此在您的情况下,它应该是SOAP: <SOAP-ENV:Envelo...
但是,您很少在HTTP标头中看到这样的字符串;您通常会在POST
正文中看到它。如果目标服务确实需要标题中的这些数据,那么它可能应该首先进行Base64编码。
答案 1 :(得分:0)
对我来说,这是我命名的标题。它有一个无效的字符(空格)。