gpt4 book ai didi

c# - HttpResponseMessage.Content.Headers ContentDisposition 为空

转载 作者:IT王子 更新时间:2023-10-29 04:50:36 24 4
gpt4 key购买 nike

使用 HttpClient 下载文件时,我会先下载 header ,然后再下载内容。下载 header 时,我可以在 HttpResponseMessage 的 Content 属性上看到 Headers 集合,但是当通过 Headers 上的 ContentDisposition 访问它时,得到 null screenshot

为什么会这样? Fiddler 显示 header 很好...

代码:

var responseMessage = await httpClient.GetAsync(uri, 
HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(continueOnCapturedContext: false);

更新1

看起来此类遵循 RFC 2616 中概述的 Content-Disposition 实现并且无法处理 Content-Disposition 实现更新 RFC 6266 . RFC 2616 定义了 filename参数值是一个带引号的字符串,其中更新 RFC 6266 只是声明它应该是

RFC 2616 语法

content-disposition = "Content-Disposition" ":"
disposition-type *( ";" disposition-parm )
disposition-type = "attachment" | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = "filename" "=" quoted-string
disp-extension-token = token
disp-extension-parm = token "=" ( token | quoted-string )

RFC 6266 语法

content-disposition = "Content-Disposition" ":"
disposition-type *( ";" disposition-parm )

disposition-type = "inline" | "attachment" | disp-ext-type
; case-insensitive
disp-ext-type = token

disposition-parm = filename-parm | disp-ext-parm

filename-parm = "filename" "=" value
| "filename*" "=" ext-value

disp-ext-parm = token "=" value
| ext-token "=" ext-value
ext-token = <the characters in token, followed by "*">

哪里ext-value = <ext-value, defined in [RFC5987], Section 3.2>

例子

工作案例

Working case

失败案例

Failing case

更新2

打开一个ticket与 MS 连接。

更新 3

Microsoft 已承认 this is a bug并将修复它。

最佳答案

谢谢 - 发现这对我很有帮助。为了其他人的利益,这是我的解决方法(显然这在今天仍然是一回事???)

我处于某种程度受控的环境中,因此以下代码假定:

  • 只有一个 Content-Disposition header
  • 标签的格式是:inline; "文件名";

这将重置响应的 ContentDisposition header ,因此后续代码可以无缝运行:

<!-- language: c# -->
if (response.Content.Headers.ContentDisposition == null)
{
IEnumerable<string> contentDisposition;
if (response.Content.Headers.TryGetValues("Content-Disposition", out contentDisposition))
{
response.Content.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse(contentDisposition.ToArray()[0].TrimEnd(';').Replace("\"",""));
}
}

关于c# - HttpResponseMessage.Content.Headers ContentDisposition 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com