&引用;“操作无效”;HttpClient的Xamarin.iOS项目出错

&引用;“操作无效”;HttpClient的Xamarin.iOS项目出错,xamarin.ios,xamarin,httpclient,Xamarin.ios,Xamarin,Httpclient,我创建HttpClient并在按钮单击处理程序处调用GetStringAsync方法: var client = new HttpClient(); var response = await client.GetStringAsync("http://google.com"); Debug.WriteLine("Response received: {0}", response); 每次我出现以下错误时: System.InvalidOperationException: Operation

我创建HttpClient并在按钮单击处理程序处调用GetStringAsync方法:

var client = new HttpClient();
var response = await client.GetStringAsync("http://google.com");
Debug.WriteLine("Response received: {0}", response);
每次我出现以下错误时:

System.InvalidOperationException: Operation is not valid due to the current state of the object

2014-05-10 01:26:36.657 HelloWorld3[490:60b] Unhandled managed exception: Operation is not valid due to the current state of the object (System.InvalidOperationException)
  at System.Lightup.Call[HttpWebRequest,Int64] (System.Delegate& storage, System.Net.HttpWebRequest instance, System.String methodName, Int64 parameter) [0x00000] in <filename unknown>:0 
  at System.Lightup.Set[HttpWebRequest,Int64] (System.Delegate& storage, System.Net.HttpWebRequest instance, System.String propertyName, Int64 value) [0x00000] in <filename unknown>:0 
  at System.Net.HttpWebRequestLightup.SetContentLength (System.Net.HttpWebRequest instance, Int64 value) [0x00000] in <filename unknown>:0 
  at System.Net.Http.HttpWebRequest.set_ContentLength (Int64 value) [0x00000] in <filename unknown>:0 
  at System.Net.Http.HttpClientHandler.StartRequest (System.Object obj) [0x00000] in <filename unknown>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispat
chInfo.Throw () [0x0000b] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:62 
  at System.Runtime.CompilerServices.TaskAwaiter`1[System.String].GetResult () [0x00000] in <filename unknown>:0 
  at HelloWorld3.MyViewController+<<ViewDidLoad>b__0>d__1.MoveNext () [0x00029] in c:\Sources\Local\HelloWorld3\HelloWorld3\MyViewController.cs:41 
Debugging session ended.
The program 'Mono' has exited with code 0 (0x0).
System.InvalidOperationException:由于对象的当前状态,操作无效
2014-05-10 01:26:36.657 HelloWorld3[490:60b]未处理的托管异常:由于对象的当前状态(System.InvalidOperationException),操作无效
在System.Lightup.Call[HttpWebRequest,Int64](System.Delegate&storage,System.Net.HttpWebRequest实例,System.String methodName,Int64参数)[0x00000]中:0
在System.Lightup.Set[HttpWebRequest,Int64](System.Delegate&storage,System.Net.HttpWebRequest实例,System.String propertyName,Int64值)[0x00000]中:0
在System.Net.HttpWebRequestLightup.SetContentLength(System.Net.HttpWebRequest实例,Int64值)[0x00000]中:0
在System.Net.Http.HttpWebRequest.set_ContentLength(Int64值)[0x00000]中:0
位于System.Net.Http.HttpClientHandler.StartRequest(System.Object obj)[0x00000]中:0
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispat
chInfo.Throw()[0x0000b]位于/Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:62
位于System.Runtime.CompilerServices.TaskAwaiter`1[System.String].GetResult()[0x00000]的位置:0
在c:\Sources\Local\HelloWorld3\HelloWorld3\MyViewController.cs:41中的HelloWorld3.MyViewController+d_u1.MoveNext()[0x00029]处
调试会话已结束。
程序“Mono”已退出,代码为0(0x0)。
我没有使用可移植的libs、nuget等,只是从模板创建了一个简单的项目。 如何解决这个问题

此处复制版本的测试项目:

通常,在使用PCL程序集和Windows构建应用程序时会发生这种情况

我没有使用便携库

好吧,不过你还是可能陷入同样的境地。您在Mac上复制(和编译)的
System.Http.Net.dll
版本错误(MS not XI)。例如

在系统上。点亮

不是Xamarin.iOS附带的程序集的一部分。在堆栈跟踪中包含此项表示使用了错误的程序集

这是一个正在修复的已知问题(至少对于PCL部件)。同时,一般的解决方法是使用重定向文件(请参阅)或从Mac构建


在您的特定情况下,您可能只需要确保引用了正确的程序集。

另一个解决方法是将您的web请求封装到注入PCL的服务中。
不太理想,但这正是我目前所做的。

在讨论特定于平台的“简单”处理程序和IoC魔术的主要复杂性之前,我建议您验证以下几点。毕竟,Xamarin和Mono的全部目的是从一开始就避免所有这些黑色santeria黑客攻击

如果这不起作用,我会把它弄得一团糟,然后发疯。。。但首先从这里开始:

  • 确保特定于平台的项目(MyProject.iOS或MyProject.Android)在references下引用了System.Net.Http

  • 确保您的PCL针对的是特定于平台的项目目标所支持的配置文件(在撰写本文时,我在iOS和Android项目中使用“PCL 4.5-Profile78”)

  • 祝你好运

    我也有同样的问题! 使用Florianzimmerman解决方案解决问题

    关于此链接:

  • 右键单击ios或android解决方案的参考目录
  • 选择“编辑参照”
  • 在packages选项卡中,选中System.Net.Http
  • 建造
    希望有帮助。

    我尝试了app.config和asm版本重定向。我还检查了引用的程序集,它是正确的。我创建了干净的ios项目,添加了httpclient libs,并尝试执行http请求-Qtime,但出现了相同的错误。我现在所做的事情和通常忘记在android和ios项目中添加程序包一样简单明了,这会给你带来有趣的错误。。。