Monotouch/C#版"stringWithContentsOfUrl"

Jam*_*ght 1 c# objective-c xamarin.ios

我正在尝试将一段Objective-C代码转换为C#以便与Monotouch一起使用,我不知道要用什么代替stringWithContentsOfUrl 我应该使用类似的东西:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.helephant.com");
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK &&
    response.ContentLength > 0){
    TextReader reader = new StreamReader(response.GetResponseStream());
    string text = reader.ReadToEnd();
    Console.Write(text);
}
Run Code Online (Sandbox Code Playgroud)

在MonoTouch中使用它是否安全?它适用于iPhone吗?

mig*_*aza 6

对于快速作业,您可以使用更简单的WebClient.

这样做:

var web = new System.Net.WebClient ();
var result = web.DownloadString ("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)

WebClient中有各种各样的帮助方法,可以让您下载原始数据或直接下载到文件中.此外,您可以使用这些方法的"异步"版本以异步方式下载数据,并在下载完成时收到通知:

web.DownloadStringCompleted += delegate (object sender, DownloadStringCompletedEventArgs e){
   Console.WriteLine ("Got {0}", e.Result);
}
web.DownloadStringAsync ("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Async变体,请记住您无法直接调用任何UI方法,因为UIKit不是支持从多个线程访问的工具包.您必须使用NSObject.InvokeOnMainThread来确保在正确的线程中调用您调用的代码:

web.DownloadStringCompleted += delegate (object sender, DownloadStringCompletedEventArgs e){
   label.InvokeOnMainThread (delegate { label.Text = e.Result; });
}
web.DownloadStringAsync ("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)