我需要使用代理加载webview的内容。 我有这个代码(Objective-C):
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.connectionProxyDictionary = @{ (NSString *)kCFStreamPropertyHTTPProxyHost: [proxyURL host], (NSString *)kCFStreamPropertyHTTPProxyPort: [proxyURL port] };
以下Xamarin代码不起作用,ConnectionProxyDictionary已设置但应用程序未使用此设置:
var configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
configuration.ConnectionProxyDictionary = new NSDictionary("kCFStreamPropertyHTTPProxyHost", proxyURL.Host, "kCFStreamPropertyHTTPProxyPort", proxyURL.port);
如何将Objective-C代码移植到Xamarin.iOS?还有另一种方法可以达到同样的目标吗?
答案 0 :(得分:1)
它不起作用的原因是因为在Objective-C中,kXX被替换为对常量的实际引用,而在C#中,您只是插入了一个字符串名称。
你需要获取该常量的值并传递它:
使用此:
using MonoTouch.ObjCRuntime;
...
var keyHost = Dlfcn.GetStringConstant ("kCFStreamPropertyHTTPProxyHost")
var keyPort = Dlfcn.GetStringConstant ("kCFStreamPropertyHTTPProxyPort")
然后使用keyHost和keyPort作为NSDictionary中的参数
答案 1 :(得分:0)
var configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
NSObject[] values = new NSObject[]
{
NSObject.FromObject(proxyURL.host), //ProxyHost
NSNumber.FromInt32 (proxyURL.port), //Port
NSNumber.FromInt32 (1), //Enable HTTP proxy
};
NSObject[] keys = new NSObject[]
{
NSObject.FromObject("HTTPProxy"),
NSObject.FromObject("HTTPPort"),
NSObject.FromObject("HTTPEnable")
};
NSDictionary proxyDict = NSDictionary.FromObjectsAndKeys (values, keys);
configuration.ConnectionProxyDictionary = proxyDict;
var session = NSUrlSession.FromConfiguration (configuration);
var task = session.CreateDataTask(NSUrl.FromString("http://google.com"));
task.Resume ();