我正在使用WebClient来发现下载文件名,使用内容处理。
调用client.ResponseHeaders["content-disposition"]
会返回以下字符串:
attachment; filename="2013122100000030141b0feedd40488fa2b0691fa6ae2a.zip
然后,
fileName = new ContentDisposition(responseHeader).FileName;
抛出异常“指定的内容处置无效。”:
System.FormatException: The specified content disposition is invalid. ---> System.FormatException: The mail header is malformed.
at System.Net.Mime.MailBnfHelper.ReadQuotedString(String data, Int32& offset, StringBuilder builder, Boolean doesntRequireQuotes, Boolean permitUnicodeInDisplayName)
at System.Net.Mime.ContentDisposition.ParseValue()
--- End of inner exception stack trace ---
at System.Net.Mime.ContentDisposition.ParseValue()
at System.Net.Mime.ContentDisposition..ctor(String disposition)
我发现content-disposition字符串缺少尾随引号。当引号(“)放在.zip之后时,它可以工作。
服务器似乎是IIS 6.它是ContentDisposition
类中的错误吗?我不想担心通过删除不需要的引号来处理该字符串,但在这种情况下,我无法解释“谁”错误,服务器或类。有什么想法吗?
更新
根据HTTP Content-Disposition specification:
Content-Disposition response-header字段已被提议为 表示如果用户,原始服务器建议默认文件名 请求将内容保存到文件中。导出此用法 来自RFC 1806 [35]中Content-Disposition的定义。
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 ) An example is Content-Disposition: attachment; filename="fname.ext"
从引用的RFC中,引号不是约束,所以我认为ContentDisposition类应该更灵活地接受文件名中不带引号的字符串。