HttpClient POST中的西里尔符号请求上传文件名

时间:2016-11-10 09:48:39

标签: c# httprequest

在我的一个.NET应用程序中,我采用的方法是通过 HttpClient 将文件上传到网站。这是实现

        using (var clientHandler = new HttpClientHandler
        {
            CookieContainer = cookieContainer,
            UseDefaultCredentials = true
        })
        {
            using (var client = new HttpClient(clientHandler))
            {
                client.BaseAddress = requestAddress;
                client.DefaultRequestHeaders.Accept.Clear();
                using (var content = new MultipartFormDataContent())
                {

                    var streamContent = new StreamContent(new MemoryStream(fileData));

                    streamContent.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse("form-data");
                    streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("name", "contentFile"));
                    streamContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("filename", "\"" + fileName + "\""));
                    streamContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);

                    content.Add(streamContent);

                    HttpResponseMessage response = await client.PostAsync("/Files/UploadFile", content);


                    if (response.IsSuccessStatusCode)
                    {
                        return true;
                    }

                    return false;
                }
            }
        }

方法工作正常。但是当我在 fileName 属性中传递Cyrillic符号后,请求文件名已经损坏符号,如 ???? 1.docx ,例如替换西里尔符号。有没有办法在没有腐败的情况下发送西里尔符号?

1 个答案:

答案 0 :(得分:0)

我相信filename在代码页方面的功能非常有限。我猜它只支持ASCII(不是100%肯定)。有一个更好的标题,你可以使用名为filename*,这有点难以谷歌,因为谷歌将删除*,你得到所有普通的filename

长话短说,你需要使用它:

$"filename*=UTF-8''{fileName}"

你也可能需要对空间等进行一些文件名编码。你可以多点google +查看这个SO post

P.S。一些较旧的浏览器可能不喜欢它,您需要检查您的要求。