2016-01-14 1 views
4

СЦЕНАРИЙ:
Прежде всего, пожалуйста, рассмотрите я использую 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», но я не могу достичь значения:

enter image description here

ВОПРОС:

Как я могу установить это и получить без каких-либо сомнений от клиента?

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(); 
       } 

      } 
+2

Не могли бы вы показать код, который делает запрос и как вы пытаетесь «получить» заголовки? Данные Content-Length и Content-Type также находятся в коллекции «недопустимые заголовки», я подозреваю ваш код запроса. – CodeCaster

+0

уверен, я не думал, что это было, позвольте мне уточнить мой вопрос. Done @CodeCaster благодарит за ваше предложение! –

+0

просто любопытно, но если MediaTypeHeaderValue является 'application/octet-stream', вы не должны читать ответ с помощью' ReadAsStreamAsync(). Результат? – terbubbs

ответ

9

Если вы пытаетесь получить заголовки содержимого, это должно быть fr om response.Content.Headers