问题描述
我正在向一个 API 发帖,该 API 似乎坚持将 XML 数据作为多部分/表单数据接收。 该请求适用于 SOAP UI。但是,在 c# 中失败。下面是基于https://technet.rapaport.com/Info/LotUpload/SampleCode/Full_Example.aspx
提交的代码string url = string.Format("url");
string strTkn = "strTkn";
string hdrXml = string.Format("<?xml version=\"1.0\" ?>\n<importdata>\n --redacted-XML-- \n</importdata>");
WebRequest request = WebRequest.Create(url);
request.Headers.Add("Authorization","Bearer " + strTkn);
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
string formContentType = "multipart/form-data; boundary=" + boundary;
request.ContentType = formContentType;
request.Method = "POST";
Stream postDataStream = new System.IO.MemoryStream();
string fileHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
"Content-disposition: form-data; name=\"xml\"; filename=\"request\"" +
Environment.NewLine + "Content-Type: text/xml" + Environment.NewLine + Environment.NewLine;
byte[] byteHdr = System.Text.Encoding.UTF8.GetBytes(fileHeaderTemplate);
byte[] byteEnd = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "--");
byte[] byteArray = System.Text.UTF8Encoding.UTF8.GetBytes(hdrXml);
postDataStream.Write(byteHdr,byteHdr.Length);
postDataStream.Write(byteArray,byteArray.Length);
postDataStream.Write(byteEnd,byteEnd.Length);
postDataStream.Position = 0;
byte[] buffer = new byte[1024];
int bytesRead = 0;
request.ContentLength = postDataStream.Length;
Stream reqStream = request.GetRequestStream();
while ((bytesRead = postDataStream.Read(buffer,buffer.Length)) != 0)
{
reqStream.Write(buffer,bytesRead);
}
postDataStream.Close();
reqStream.Close();
StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream());
string Result = sr.ReadToEnd();
解决方法
MIME 附件以新行开头的两个破折号开头。见:https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/aa563375(v=exchg.140)
你有一个以两个破折号开头的额外行
这是您的 MIME 附件
- byteHdr :
------------------------------8d90d21ca8659b4 内容配置:表单数据;名称="xml";文件名=“请求” 内容类型:text/xml
- 字节结束
------------------------------8d90d21ca8659b4--
-
byteArray : 两个破折号下方不从新行开始。
<?xml version="1.0" ?> <importdata> --redacted-XML-- </importdata>