Положение
Я использую HttpClient (System.Net.Http, версия = 4.2.1.0) для отправки запроса HTTP с данными из нескольких частей формы в веб-API. Данные формы включают строковый параметр (benchmark
) и файл (addressFile
), который содержится в stream
. Вызов API возвращает CSV-файл, который я хочу сохранить на диск.
Ответ содержит заголовок Transfer-Encoding: chunked
, а данные, содержащиеся в responseBytes
, включают заголовки чанка. Я бы ожидал, что библиотека HttpClient удалит эти заголовки, которые являются метаданными для фактического содержимого. Вместо этого он просто включает строки заголовка в Content
.
Вопрос
Как правильно обращаться с этими заголовками фрагментов?
Конечно, я мог бы написать метод для обработки заголовков самостоятельно, но мне трудно поверить, что в библиотеке HttpClient эта функциональность где-то еще не реализована.
код
using (var client = new HttpClient())
{
var content = new MultipartFormDataContent();
content.Add(new StringContent("Public_AR_Current"), "benchmark");
content.Add(new ByteArrayContent(stream.ToArray()), "addressFile", "addressFile.csv");
var response = await client.PostAsync("https://geocoding.geo.census.gov/geocoder/locations/addressbatch", content);
var responseBytes = await response.Content.ReadAsByteArrayAsync();
saveResponse(responseBytes);
var geocodedItems = ParseGeocodeResponse(responseBytes);
var parsedItems = geocodedItems.Select(gi => gi.ToEpaHandlerUsCensusGeocode());
return parsedItems;
}
Результат
Обратите внимание на заголовок чанка в первой и последующих строках (0fe8
, 0060
, 0fe8
).
0fe8
0fe8
"AK0000036228","500 HOLLYWOOD DR, ANCHORAGE, AK, 99501","Match","Exact","500 HOLLYWOOD DR, ANCHORAGE, AK, 99501","-149.87424,61.23034","190797469","R"
"AK0000363994","3155 E 18TH CIR, ANCHORAGE, AK, 99508","Match","Non_Exact","3155 E 18TH CIR, ANCHORAGE, AK, 99508","-149.82193,61.20462","190799569","L"
...
0060
28712","N 65 DEG 35 15 W 167 DEG 55 18, WALES, AK, 99734","No_Match"
"AK0000112227","KODIAK ARPR
...
0fe8
T AREA, KODIAK, AK, 99615","No_Match"
"AK0000033902","2130 E DIMOND BLVD, ANCHORAGE, AK, 99515","Match","Non_Exact","2130 W DIMOND BLVD, ANCHORAGE, AK, 99515","-149.91881,61.1375","190795925","L"
"AK0000562769","3100 TONGASS AVE, KETCHIKAN, AK, 99901-5746","No_Match"
Ожидаемый результат
Я ожидаю, что заголовки будут удалены библиотекой HttpClient.
"AK0000036228","500 HOLLYWOOD DR, ANCHORAGE, AK, 99501","Match","Exact","500 HOLLYWOOD DR, ANCHORAGE, AK, 99501","-149.87424,61.23034","190797469","R"
"AK0000363994","3155 E 18TH CIR, ANCHORAGE, AK, 99508","Match","Non_Exact","3155 E 18TH CIR, ANCHORAGE, AK, 99508","-149.82193,61.20462","190799569","L"
"AK0000228718","1050 ASPEN ST, FAIRBANKS, AK, 99709-5501","Match","Exact","1050 ASPEN ST, FAIRBANKS, AK, 99709","-147.7731,64.8535","605310042","L"
"AK0000536714","SMITH COVE IN SMITH LAGOON T74S R86E CRM S17 & 20, KASAAN, AK, 99901","No_Match"
"AK0001413822","USS-12403, N BANK WOOD RIVER, ALEKNAGIK, AK, 99555","No_Match"
"AK0000489567","BREAKWATER BTWN WESTERN AVE & TAIT ST, METLAKATLA, AK, 99926","No_Match"