ASP.NET WebApi - HttpClient - 找不到方法

时间:2012-03-20 13:14:11

标签: asp.net httpclient asp.net-web-api

我正在尝试使用Asp.NET WebAPI模块,但是我得到了一个奇怪的错误。 当我尝试运行这个简单的程序时:

class Program
{
    static void Main(string[] args)
    {
        System.Net.Http.HttpClient client = new HttpClient();
        string data = client.GetStringAsync("http://www.kralizek.se/").Result;

        Console.WriteLine(data);

        Console.ReadLine();
    }
}

我有这个错误。

System.MissingMethodException was unhandled
  Message=Method not found: 'System.Threading.Tasks.Task`1<System.String> System.Net.Http.HttpClient.GetStringAsync(System.String)'.
  Source=Connector.App
  StackTrace:
       at ConnectorApp.Program.Main(String[] args)
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()

错误发生在Visual Studio和LinqPad中,但我的同事没有这样做。

我认为可能与.NET 4.5开发预览存在某种冲突,所以我卸载它但没有任何好处。

由于

2 个答案:

答案 0 :(得分:2)

ASP.NET Web API Beta明显与.NET Framework 4.5开发人员预览版不兼容。请参阅http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253802

我建议卸载两者并在清除两者后重新安装Web API。我不认为在安装Web API之后卸载.NET 4.5 就可以了。

答案 1 :(得分:0)

安装VS2012后,可以使用RTM之前的WebAPI。将以下内容添加到您的app / web.config

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0 - 2.0.0.0" newVersion="2.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

问题是System.Net.Http的RTM版本会覆盖RTM之前的版本,因为较新的版本在GAC中,而assy发现更喜欢新版本。即使您 explicity 文件引用旧版本(grrr)。

NewtonSoft条目并非绝对必要......

无论如何,这对我们有用。