我正在尝试在 MonoDroid 项目上使用 HttpClient 类,但它看起来像 System.Net.http 命名空间无效。
我尝试在项目中添加对 System.Net.http.dll 的引用,但它似乎在引用列表中不可用。
任何想法?
谢谢
我正在尝试在 MonoDroid 项目上使用 HttpClient 类,但它看起来像 System.Net.http 命名空间无效。
我尝试在项目中添加对 System.Net.http.dll 的引用,但它似乎在引用列表中不可用。
任何想法?
谢谢
HttpClient 是一个 .NET 4.5 类,在 Mono for Android 中尚不可用。Mono 本身在 3.0 版本中添加了对它的支持,但 Mono for Android 仍然基于 Mono 2.10。我知道 Xamarin 现在正在努力将适用于 Android 的 Mono(和 MonoTouch)更新到 Mono 3.0,但据我所知,还没有确定发布日期。
我知道这是一个旧线程,但我刚刚看到 Xamarin 终于System.Net.Http
在Xamarin.Android 4.8中给出了,所以也想和你分享一下。
谢谢。
您不能使用HttpClient
(还没有!),但您仍然可以使用该System.Net.HttpWebRequest
对象,它确实HttpClient
可以提供方便的包装器(尤其是在访问 Web API 控制器时)。
这是我正在处理的当前项目的示例(它使用的是 monodroid 端口NewtonSoft.Json
,而不是标准端口System.Runtime.Serialization.Json
):
private void AddARecord()
{
var cartesian = new Cartesian()
{
Description = "next item blah",
X = 5,
Y = 10,
Z = 15,
};
string json = JsonConvert.SerializeObject(cartesian);
var request = new HttpWebRequest(new Uri(_url)) {ContentType = "application/json", Method = "POST"};
var sw = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
sw.Write(json);
sw.Close();
request.BeginGetResponse(ProcessJsonResponseForSingleResult, request);
}
...我正在点击的 Web API 控制器执行一些任意操作,保存我刚刚发送的对象,然后调整描述,以便我知道它有效。然后它将调整后的对象发回......
然后回调ProcessJsonResponseForSingleResult
看起来像
private void ProcessJsonResponseForSingleResult(IAsyncResult ar)
{
var request = (HttpWebRequest)ar.AsyncState;
var response = request.EndGetResponse(ar);
using (var outputStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII))
{
var jsonString = outputStream.ReadToEnd();
Log.Info("PJRFSR", string.Format("JSON string: {0} - deserialising...", jsonString));
var cartesian = JsonConvert.DeserializeObject<Cartesian>(jsonString);
RunOnUiThread(() => UpdateUiTextView(cartesian.Description));
}
}
是的,我知道,它使用我不再喜欢的 BeginAsync/EndAsync 模式,但如果你只需要完成某事,它确实有效。