我正在尝试在MonoDroid项目中使用HttpClient类,但它看起来像System.Net.http命名空间它无效。
我尝试将项目中的引用添加到System.Net.http.dll,但它似乎在引用列表中不可用。
有什么想法吗?
THKS
答案 0 :(得分:4)
HttpClient是一个.NET 4.5类,在Mono for Android中尚不可用。 Mono本身在3.0版中添加了支持,但Mono for Android仍然基于Mono 2.10。我知道Xamarin现在正在努力将Mono for Android(和MonoTouch)更新到Mono 3.0,但据我所知,还没有设置发布日期。
答案 1 :(得分:2)
我知道这是一个旧帖子,但我刚看到Xamarin终于在Xamarin.Android 4.8中给了System.Net.Http
,所以想也与你分享。
感谢。
答案 2 :(得分:1)
你不能使用HttpClient
(还是!),但你仍然可以使用System.Net.HttpWebRequest
对象,它实际上做了HttpClient
可以提供方便包装的东西(尤其是在击中时)一个Web API控制器。)
以下是我正在处理的当前项目的示例(它使用NewtonSoft.Json
的monodroid端口,而不是标准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模式,但如果你只是需要完成某些事情,它确实有效。