我正在创建一种代理服务,需要将包含
XML的调用从POST主体处理到我的WebAPI服务,然后将其POST到另一个服务上.
奇怪的是,当我从POST收到XML消息时,身体的第一部分XML被切断了.最初我认为可能是缓冲区大小,或者消息太大,所以我删除了大量发送的XML测试消息,减少了发送的内容.然而,XML仍然在同一个地方被切断.@H_403_3@
我尝试了以下(2)方法来读取WebAPI服务中的XML BODY,结果是一样的:@H_403_3@
var reader = new StreamReader(Request.Content.ReadAsStreamAsync().Result); string originalMessage = reader.ReadToEnd();
和:@H_403_3@
var result = ""; Request.Content.ReadAsStreamAsync().ContinueWith(x => { using (var sr = new StreamReader(x.Result)) { result = sr.ReadToEnd(); } });
这是原始XML的片段:@H_403_3@
<Message version="123" release="001" xmlns="http://www.mysite.com/schema"> <Header> <To Att1="A">001</To> <From Att2="B">002</From> <ID>9876</ID>
在WebAPI控制器POST中读取内容后,这是内容的开头:@H_403_3@
</To> <From Att2="B">002</From> <ID>9876</ID>
看看它是如何从< To>的’结束’标签开始的.元件?这显然不是它发送的XML的开始.@H_403_3@
更奇特的是在发送之前检查的“内容大小”以及在两侧之后是4188.还有一件有趣的事情是,我有一个旧式的.asmx测试器(而不是Web API服务)可以做同样的事情.当我使用以下内容读取该应用程序中的传入XML消息时:@H_403_3@
// Get raw request body Stream receiveStream = HttpContext.Current.Request.InputStream; // Move to beginning of input stream and read receiveStream.Position = 0; using (StreamReader readStream = new StreamReader(receiveStream,Encoding.UTF8)) { // Load into XML document xmlSoapRequest.Load(readStream); }
…我看到了完整的XML消息.所以不确定为什么.asmx可以完全读取它而不是WebAPI服务.@H_403_3@