2013-12-23 37 views
1

我正在使用WebClient來發現使用內容處置的下載文件名。ContentDisposition類引發不一致的異常

調用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) 

我已經想通了,在內容處置串缺少尾隨引號。當引號(「)放在.zip後面時,它可以工作。

該服務器似乎是IIS 6.它是否是ContentDisposition類中的錯誤?我不想擔心通過刪除不需要的字符串引號,但我無法解釋「誰」是錯誤在這種情況下,服務器或類中的任何想法

更新:?

按照HTTP Content-Disposition specification

內容-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類應該是更加靈活,接受文件名不帶引號的字符串。

回答