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