C# 我可以使用NSUrlSession在HTTP头中允许原始unicode吗?

C# 我可以使用NSUrlSession在HTTP头中允许原始unicode吗?,c#,ios,unicode,xamarin,nsurlsession,C#,Ios,Unicode,Xamarin,Nsurlsession,我正在构建一个NSUrlSession,如下所示: NSUrlSessionConfiguration sessionCfg = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("mySpecialSessionName"); NSUrlSessionDelegate sessionDelegate = new MySessionDelegate(); urlSession = NSUrlSession.FromCon

我正在构建一个NSUrlSession,如下所示:

NSUrlSessionConfiguration sessionCfg = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("mySpecialSessionName");
NSUrlSessionDelegate sessionDelegate = new MySessionDelegate();
urlSession = NSUrlSession.FromConfiguration(sessionCfg, sessionDelegate, NSOperationQueue.MainQueue);
以及使用自定义HTTP头调用后台下载:

NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest();
mutableRequest.HttpMethod = "POST";
mutableRequest.Url = NSUrl.FromString(someEndpoint);
mutableRequest["MyCustomHeader"] = someStringWithUnicodeChars;
mutableRequest.Body = NSData.FromString(somePostBody);

NSUrlSessionDownloadTask downloadTask = m_UrlSession.CreateDownloadTask(mutableRequest);
downloadTask.Resume();
但是,标题值字符串似乎在255以上的第一个字符处被截断。例如,标题值:

SupeЯ Σario Bros SupeЯ∑ario Bros 由服务器接收为

Supe 苏佩 在xamarin上使用.NET HttpClient时,unicode头字符串成功地将其未经修改地发送到服务器。但是,我想利用NSUrlSession的后台下载功能


(我意识到HTTP头中对unicode的支持是偶然的,但由于本例中的HTTP服务器是一个特定的自定义服务器,目前不支持base64编码之类的东西,因此需要传递原始字符串)

我不知道您是否能够做到这一点,但我想到了两件事:

  • 这里的内容相当于在URL请求上调用setValue:forKey:。我不认为这会达到你的期望。尝试调用setValue:forHTTPHeaderField:方法
  • 在指定自定义标头值之前,请尝试指定编码,例如[theRequest setValue:@“…;charset=UTF-8”forHTTPHeaderField:@“Content Type”]
如果这两种方法都不起作用,那么您可能必须以某种方式对数据进行编码。我建议使用URL编码,因为这比Base64在服务器端实现简单得多。对于iOS端,有关如何对字符串进行URL编码的信息,请参阅此链接:


表示“setValue:forHTTPHeaderField:选择器映射到NSMutableUrlRequest的索引器”,即括号运算符。所以我相信我已经在关注你的第一颗子弹了。可能是,但出于某种原因,在我的脑海里,我一直在想,有些边缘案例的表现不同。我可能错了。在设置其他标题之前,将“Content Type”标题设置为“application/octet stream;charset=UTF-8”似乎没有帮助。有趣的是,我在Safari上尝试了一些javascript代码来发送带有这样一个标题的ajax请求,并导致了相同的截断。