C# 从WebAPI调用体读取XML内容在开始时被切断

C# 从WebAPI调用体读取XML内容在开始时被切断,c#,asp.net-web-api,http-post,dotnet-httpclient,C#,Asp.net Web Api,Http Post,Dotnet Httpclient,我正在创建一种代理服务,它需要处理从POST主体到我的WebAPI服务的、包含XML的调用,然后将其发送到另一个服务 奇怪的是,当我从POST接收到XML消息时,正文中XML的第一部分被切断。起初,我认为可能是缓冲区大小,或者消息太大,所以我删掉了很多正在发送的XML测试消息,减少了正在发送的内容。然而,XML仍然在同一位置被切断 我尝试了以下(2)种方法来读取WebAPI服务中的XML正文,结果是一样的: var reader = new StreamReader(Request.Conten

我正在创建一种代理服务,它需要处理从
POST
主体到我的WebAPI服务的、包含XML的调用,然后将其发送到另一个服务

奇怪的是,当我从
POST
接收到XML消息时,正文中XML的第一部分被切断。起初,我认为可能是缓冲区大小,或者消息太大,所以我删掉了很多正在发送的XML测试消息,减少了正在发送的内容。然而,XML仍然在同一位置被切断

我尝试了以下(2)种方法来读取WebAPI服务中的XML正文,结果是一样的:

var reader = new StreamReader(Request.Content.ReadAsStreamAsync().Result);
string originalMessage = reader.ReadToEnd();
以及:

以下是原始XML的一个片段:

<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>
查看它如何从
元素的“closing”标记开始?这显然不是它发送的XML的开始

更奇怪的是,在发送前和发送后检查的“内容大小”两侧均为4188。另一件有趣的事情是,我有一个老式的
.asmx
测试仪(与Web API服务相反),它做同样的事情。当我使用以下命令在该应用程序中读取传入的XML消息时:

    // 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服务


当我调用WebAPI
POST
时,如果我看不到请求正文中发送的完整XML消息,那么我做错了什么呢?

我很好地解决了这个问题,但不能100%确定原因。我用于
POST
的参数是开箱即用的:

public HttpResponseMessage Post([FromBody]string value)
我将其更改为将请求作为
POST
上的参数:

public HttpResponseMessage Post(HttpRequestMessage request)

当我执行上面的第二个选项时,我开始按预期从请求中获取整个XML正文。

第一个方法签名导致Web API使用当前配置的XML序列化程序尝试将消息反序列化为“字符串”对象,这根本不是您想要做的。第二种方法更有意义,因为您没有试图跨线路序列化对象。
public HttpResponseMessage Post([FromBody]string value)
public HttpResponseMessage Post(HttpRequestMessage request)