C# 使用WebRequest c将xml数据作为多部分/表单数据发送#

C# 使用WebRequest c将xml数据作为多部分/表单数据发送#,c#,xml,multipartform-data,webrequest,C#,Xml,Multipartform Data,Webrequest,我正在发布一个API,它似乎坚持将XML数据作为多部分/表单数据接收。 请求在soapui中工作。但是,在c#中失败。以下是基于以下内容提交的代码: stringurl=string.Format(“url”); 字符串strTkn=“strTkn”; string hdrXml=string.Format(“\n\n--redated XML--\n”); WebRequest=WebRequest.Create(url); 请求。标题。添加(“授权”、“持票人”+strTkn); 字符串边界

我正在发布一个API,它似乎坚持将XML数据作为多部分/表单数据接收。 请求在soapui中工作。但是,在c#中失败。以下是基于以下内容提交的代码:

stringurl=string.Format(“url”);
字符串strTkn=“strTkn”;
string hdrXml=string.Format(“\n\n--redated XML--\n”);
WebRequest=WebRequest.Create(url);
请求。标题。添加(“授权”、“持票人”+strTkn);
字符串边界=“------------------------------------”+DateTime.Now.Ticks.ToString(“x”);
string formContentType=“多部分/表单数据;boundary=“+boundary;
request.ContentType=formContentType;
request.Method=“POST”;
Stream postDataStream=new System.IO.MemoryStream();
字符串fileHeaderTemplate=Environment.NewLine+“--”+boundary+Environment.NewLine+
“内容处置:表单数据;名称=\“xml\”文件名=\“请求”+
Environment.NewLine+“内容类型: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);
写入(字节hdr,0,字节hdr.Length);
Write(byteArray,0,byteArray.Length);
Write(byteEnd,0,byteEnd.Length);
postDataStream.Position=0;
字节[]缓冲区=新字节[1024];
int字节读取=0;
request.ContentLength=postDataStream.Length;
Stream reqStream=request.GetRequestStream();
而((bytesRead=postDataStream.Read(buffer,0,buffer.Length))!=0)
{
请求流写入(缓冲区,0,字节读取);
}
postDataStream.Close();
reqStream.Close();
StreamReader sr=新的StreamReader(request.GetResponse().GetResponseStream());
字符串结果=sr.ReadToEnd();

MIME附件以新行开头的两个破折号开头。见:

您有一个额外的行,以两个破折号开头

这是你的MIME附件

  • 字节数:
  • ------------------------------8d90d21ca8659b4 内容配置:表单数据;name=“xml”;filename=“请求” 内容类型:text/xml

  • 拜登
  • ------------------------------8d90d21ca8659b4--

  • byteArray:下面的两个破折号不从新行的开头开始

     <?xml version="1.0" ?>
     <importdata>
      --redacted-XML-- 
     </importdata>
    
    
    --修订的XML--
    

  • 谢谢你的调查。API团队日志显示了日志中带有标题的错误。而且,我们还没有弄清楚这个问题。下面是错误日志中的错误。System.FormatException:标头在索引0处包含无效值:“多部分/表单数据;boundary=----=_Part_0_32251531.1619905346710'位于Microsoft.Net.Http.Headers.HttpHeaderParser`1.ParseValue(StringSegment值,Int32&index)示例中编辑了xml信息,不显示完整的xml数据。因此,XML中的两个破折号不是原始请求的一部分。必须在带破折号的行后面返回。查看上面的链接,了解消息的正确语法。http标头不能包含破折号。HTTP消息有三个部分:1)HTTP头2)正文(可选)3)附件。(可选)破折号在正文后面。您的错误表明破折号在标题中。
     <?xml version="1.0" ?>
     <importdata>
      --redacted-XML-- 
     </importdata>