СЦЕНАРИЙ:
Прежде всего, пожалуйста, рассмотрите я использую HttpClient
класс, не WebRequest
, я знаю, что есть много связанных с этим вопросов здесь, но все ответы для WebRequest.Невозможно получить заголовок «Content-Disposition» с HttpClient в C#
Я сделал веб-Api приложения, которые устанавливают таким образом, следующий заголовок для загрузки файла .txt:
resp.Content = new StringContent(result, System.Text.Encoding.UTF8, "text/plain");
resp.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = _datacontext.GetAppConfig("814FileNameHeader") + DateTime.Now.ToString("yyyyMMdd") + ".txt"
};
resp.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
После того как я сделана HttpClient из другого приложения для подключения к этому методу.
Все работает, извлекает 200 и содержимое файла. Но я не могу получить заголовок, чтобы прочитать имя файла.
Пытается СДЕЛАНО:
Работа с клиентом REST можно прочитать следующий атрибут заголовка:
Content-Disposition: вложение; имя файла = 814Entes_PG_20160114.txt
и из кода я мог отлаживать его, и я обнаружил, что заголовок в «invalidHeaders», но я не могу достичь значения:
ВОПРОС:
Как я могу установить это и получить без каких-либо сомнений от клиента?
UPDATE:
Это мои попытки, чтобы получить заголовок: Оригинал:
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(uri);
string authentication = string.Concat(authenticationArgs[0], ":", authenticationArgs[1]);
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Basic " + Base64Encode(authentication));
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, "Report/" + type);
req.Content = new StringContent("");
HttpResponseMessage response = await httpClient.SendAsync(req);
Console.WriteLine(response.StatusCode);
if (response.IsSuccessStatusCode)
{
string stream = response.Content.ReadAsStringAsync().Result;
Console.Write("Respuesta servicio: " + stream);
Console.WriteLine(stream);
string cp = response.Headers.GetValues("Content-Disposition").ToString();
}
Второй один я пытался с некоторыми SO исследования:
using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(uri);
string authentication = string.Concat(authenticationArgs[0], ":", authenticationArgs[1]);
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Basic " + Base64Encode(authentication));
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, "Report/" + type);
req.Content = new StringContent("");
HttpResponseMessage response = await httpClient.SendAsync(req);
Console.WriteLine(response.StatusCode);
if (response.IsSuccessStatusCode)
{
string stream = response.Content.ReadAsStringAsync().Result;
Console.Write("Respuesta servicio: " + stream);
Console.WriteLine(stream);
string cp = "";
HttpHeaders headers = response.Headers;
IEnumerable<string> values;
if (headers.TryGetValues("Content-Disposition", out values))
{
cp = values.ToString();
}
}
Не могли бы вы показать код, который делает запрос и как вы пытаетесь «получить» заголовки? Данные Content-Length и Content-Type также находятся в коллекции «недопустимые заголовки», я подозреваю ваш код запроса. – CodeCaster
уверен, я не думал, что это было, позвольте мне уточнить мой вопрос. Done @CodeCaster благодарит за ваше предложение! –
просто любопытно, но если MediaTypeHeaderValue является 'application/octet-stream', вы не должны читать ответ с помощью' ReadAsStreamAsync(). Результат? – terbubbs