C# ContentDisposition类引发不一致的异常

C# ContentDisposition类引发不一致的异常,c#,parsing,http,webclient,content-disposition,C#,Parsing,Http,Webclient,Content Disposition,我正在使用WebClient查找下载文件名,使用内容配置 调用client.ResponseHeaders[“内容处置”]返回以下字符串: attachment; filename="2013122100000030141b0feedd40488fa2b0691fa6ae2a.zip 那么 抛出异常“指定的内容处置无效。”: System.FormatException: The specified content disposition is invalid. ---> System.

我正在使用WebClient查找下载文件名,使用内容配置

调用
client.ResponseHeaders[“内容处置”]
返回以下字符串:

attachment; filename="2013122100000030141b0feedd40488fa2b0691fa6ae2a.zip
那么

抛出异常“指定的内容处置无效。”:

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
类中的错误吗?我不想担心删除不需要的引号来处理该字符串,但我无法解释在这种情况下“谁”是错的,服务器还是类。知道吗

更新:

根据报告:

内容处置响应标头字段已建议作为 表示源服务器建议默认文件名,如果用户 请求将内容保存到文件中。此用法是派生的 根据RFC 1806[35]中内容处置的定义

    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类应该更灵活地接受文件名中的不带引号的字符串。

相关的RFC是。不,以引号开头但省略结尾的引号是不正确的。

我同意,但为什么IIS服务器会以这种方式返回?
    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"