2017-02-15 180 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