簡體   English   中英

無法在 C# 中使用 httpclient 獲取 header“內容處置”

[英]Unable to get header "Content-Disposition" with httpclient in C#

設想:
首先,請考慮我使用的是HttpClient class,而不是WebRequest ,我知道這里有很多相關問題,但所有答案都是針對 WebRequest 的。

我制作了一個 Web Api 應用程序,以這種方式設置以下 header 以下載 a.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 和文件的內容。 但我無法獲得 header 來讀取文件名。

嘗試過:

使用 REST 客戶端我可以閱讀以下 header 屬性:

內容處置:附件; 文件名=814Entes_PG_20160114.txt

從代碼中我可以調試它,我發現 header 在“invalidHeaders”中,但我無法達到該值:

在此處輸入圖像描述

問題:

我該如何設置它並毫無疑問地從客戶那里獲得?

更新:

這些是我獲得 header 的嘗試: 原文:

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

            }

如果您嘗試獲取內容的標題,則應該來自response.Content.Headers

根據@terbubbs,您需要 response.Content.Headers。

但代碼也需要 - 對於第一個代碼示例:

string cp = response.Result.Content.Headers.GetValues("Content-Disposition").ToList()[0];

對於第二個:

cp = values.FirstOrDefault().ToString();

否則結果是 System.String[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM