如何解决使用 WebRequest c# 将 xml 数据作为 multipart/form-data 发送
我正在向一个 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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。