0

我在 .NET 4.5 上使用 ASP.NET 服务器,客户端是 WinRT 平台上的 C# HttpClient。我想使用 HttpClient 上传文件并使用 System.Net.Http.MultipartFormDataContent 类来构造一个有效的 http 请求。一切正常,直到我有一个带有 DBCS 字符的文件名。

MultiPartFormDataContent 类正确编码上传文件名中的字符,并根据 RFC 6266 在内容处置标头中发送文件名和文件名*键。

但是,ASP.NET 服务器会忽略文件名* 并仅读取文件名,因此文件会以奇怪的字符保存在服务器上。

有没有其他人遇到过同样的问题?如何在服务器端获取文件名*并忽略 HttpRequest 中的文件名键?[这将是我的首选解决方案。]

或者,如何强制 MultiPartFormDataContent 仅发送文件名密钥并强制设置 UTF-8 编码字符串?

4

2 回答 2

1

添加对 System.Net.Http 的引用并执行以下操作...

string suggestedFileName;   
string dispositionString = response.GetResponseHeader("Content-Disposition");

    if (dispositionString.StartsWith("attachment")) {
          System.Net.Http.Headers.ContentDispositionHeaderValue contentDisposition = System.Net.Http.Headers.ContentDispositionHeaderValue.Parse(dispositionString);
          if (!string.IsNullOrEmpty(contentDisposition.FileNameStar))
          {
              suggestedFileName = contentDisposition.FileNameStar;
          }
          else
          {
               suggestedFileName = contentDisposition.FileName.Trim('"');
          }

         }

来自 Microsoft 的 ContentDispositionHeaderValue

于 2013-06-23T20:03:02.043 回答
0

派对迟到了。。

通过控制客户端和服务器,我的(肮脏的)解决方法只是在创建内容时始终对 HttpClient 中的文件名进行 Base64 编码,并在服务器端再次对其进行解码。这样,您就不必处理恰当命名的 FileNameStar。

您也可以尝试手动检测 FileName 编码并在服务器上对其进行解码。相关主题:System.Net.Mail 和 =?utf-8?B?XXXXX.... 标头

于 2014-11-18T16:00:59.057 回答