2017-02-15 147 views
1

我有一个C#的WebAPI方法与此签名:阵列被截断

[HttpPost] 
[Route("getbyid/{date}")] 
public Response Get(DateTime date, [FromBody] List<string> ids) 

当我打电话从邮差这个方法具有n个串在体内的列表,一切工作正常。我的列表只是看起来像

["id1","id2","id3"...] 

但是,当我写一个小的C#客户端来调用它,我发现数组被截断。这不是消息大小的问题。如果我发送100个项目,则在75-80之间的地方进行服务。如果我送500约475做它。我通过记录确认该列表在调用该服务之前有500个项目,并且在控制器内部有500个项目。

这里是我的客户端代码:

string url = ".../getbyid/2017-01-01"; 
List<string> payload = new List<string>(); 
// logic to put 500 items in the list 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.UseDefaultCredentials = true; 
request.Method = "POST"; 
request.ContentType = "application/json"; 
StreamWriter writer = new StreamWriter(request.GetRequestStream()); 
JsonWriter jsonWriter = new JsonTextWriter(writer); 
JsonSerializer json = new JsonSerializer(); 
json.Serialize(jsonWriter, payload); 
WebResponse response = request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
if (responseStream == null) throw new EndOfStreamException(); 
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
// do processing... 

我在做什么错?

回答

1

我会尝试添加一个writer.Close();线。这听起来像一个流没有刷新所有它的写入

+0

宾果!谢谢!我在GetResponse调用之前添加了这一行,现在所有的结果都将它传递给服务。 – user55295

0

如果您的POST通过URL传递参数(我认为您的URL路由设置要做),您被限制在URL的长度像2800字符。

+0

正如我在问题中提到的那样,这不是问题,因为无论是通过100个还是500个结果,我都有同样的问题。但谢谢你的回复。 – user55295