Mam metodę API internetowej C # z tym podpisem:

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

Kiedy nazywam tę metodę z Listonosza z listą N sznurków w ciele, wszystko działa dobrze. Moja lista po prostu wygląda

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

Ale kiedy napisałem mały klient C #, aby go nazwie, znalazłem, że tablica zostaje obcięta. Nie jest to problem wielkości wiadomości. Jeśli wysłać 100 przedmiotów, gdzieś między 75-80, doprowadzam do usługi. Jeśli wysłać 500 około 475, zrób to. Potwierdzam rejestrowanie, że lista ma 500 pozycji tuż przed wywołaniem usługi i mniej niż 500 tuż wewnątrz sterownika.

Oto mój kod klienta:

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...

Co ja robię źle?

1
sandlb 15 luty 2017, 21:27

2 odpowiedzi

Najlepsza odpowiedź

Spróbowałbym dodać pisarza.Zamknij (); linia. To brzmi jak strumień, który nie spłukał wszystkiego, które pisze

1
Ehz 15 luty 2017, 18:56

Jeśli twój post przekazuje parametry za pośrednictwem URL (które myślę, że trasowanie adresów URL jest ustawiony), jesteś ograniczony do długości URL na coś podobnego do 2800 znaków.

0
Mark 15 luty 2017, 19:00