如何使用WebClient在SLUG标头中设置编码

时间:2016-11-24 15:44:05

标签: c# .net http encoding webclient

我正在一个需要使用WebClient将文件上传到Web应用程序的项目中。

我尝试使用以下代码,但服务器无法识别slug标头中定义的特殊字符,并将其替换为其他不可打印的字符。

WebClient.Headers.Clear();
WebClient.Headers.Add("Content-Type",GetMimeType(Path.GetExtension("aáñÑ.pdf")));
WebClient.Headers.Add("Accept", "*/*");
WebClient.Headers.Add("Referer", myRefererURL);
WebClient.Headers.Add("x-csrf-token", "securityTokenFromModel");
WebClient.Headers.Add("slug", "aáñÑ.pdf");

此外,在阅读rfc2047(http://www.ietf.org/rfc/rfc2047.txt)后,我用以下代码替换了最后一行,但服务器无法识别请求并返回错误。

WebClient.Headers.Add("slug", "(=?ISO-8859-1?q?" + "aáñÑ.pdf" + "?=)");

是否有另一种方法可以设置enconding字符集以允许在slug标题中使用特殊字符(重音符号,西班牙语字符)?

编辑:

在阅读@Julian回答后,我尝试将slug标题更改为:

WebClient.Headers.Add("slug", "The Beach at S%C3%A8te");

但是网络应用程序确切地设置了文件名:“海滩在S%C3%A8te”。

在另一个测试中,这就是Fiddler使用文件名“DocumentaciónÑñ.docx”显示请求的方式:

Internet Explorer 11发出的请求:确定

Request made by Internet Explorer 11: OK

.NET WebClient和Google Chrome提出的请求:ERROR

enter image description here

1 个答案:

答案 0 :(得分:1)

答案在规范中:

“字段值是要包含的字符序列的UTF-8编码的百分比编码值(有关百分比编码的定义,请参阅[RFC3986]的第2.1节;有关定义百分比编码,请参阅[RFC3629] UTF-8编码)。

实现说明:要从字符序列生成字段值,首先使用UTF-8编码对其进行编码,然后使用百分比编码对%20-24和%26-7E范围之外的所有八位字节进行编码(%25是ASCII编码为“%”,因此需要进行转义)。要使用字段值,首先反转百分比编码,然后通过UTF-8解码过程运行生成的八位字节序列。“

https://greenbytes.de/tech/webdav/rfc5023.html#rfc.section.9.7.1