c# - 我可以使用 NSUrlSession 在 HTTP header 中允许原始 unicode 吗?

标签 c# ios unicode xamarin nsurlsession

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

NSUrlSessionConfiguration sessionCfg = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("mySpecialSessionName");
NSUrlSessionDelegate sessionDelegate = new MySessionDelegate();
urlSession = NSUrlSession.FromConfiguration(sessionCfg, sessionDelegate, NSOperationQueue.MainQueue);

并使用自定义 HTTP header 调用后台下载:

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();

但是, header 值字符串似乎在 255 以上的第一个字符处被截断。例如, header 值:

SupeЯ Σario Bros

被服务器接收为

Supe 

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

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

最佳答案

我不知道你是否能够完成这项工作,但我想到了两件事:

  • 此处的内容等同于在 URL 请求上调用 setValue:forKey:。我认为这不会达到您的预期。尝试调用 setValue:forHTTPHeaderField: 方法。
  • 尝试在指定自定义 header 值之前指定编码,例如[theRequest setValue:@"...; charset=UTF-8"forHTTPHeaderField:@"Content-Type"];

如果这些都没有帮助,您可能必须以某种方式对数据进行编码。我建议使用 URL 编码,因为在服务器端实现起来比 Base64 简单得多。对于 iOS 端,请参阅此链接以获取有关如何对字符串进行 URL 编码的信息:

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/WorkingwithURLEncoding/WorkingwithURLEncoding.html

关于c# - 我可以使用 NSUrlSession 在 HTTP header 中允许原始 unicode 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862774/

相关文章:

ios - 在 XCode 中使用 CocoaMQTT 时 iOS 应用程序出错

ios - 与 AVFoundation 有点混淆

python - NLTK 从 CSV 中删除停用词

c# - 使用 Entity Framework Code First Development,我可以让它在现有数据库中创建一个或多个表吗?

c# - 使用 RijndaelManaged 在 C# 中加密/解密流

c# - 如何在调整大小时仅显示winforms窗口的边框?

unicode - 换行符 unicode 字符

c# - AngleSharp 解析

php - 如何使用POST上传图片和文字

reactjs - 在 React 中插入 unicode 字符