ASP.NET WebApi - HttpClient - Метод не найден - PullRequest
2 голосов
/ 20 марта 2012

Я пытаюсь использовать модуль 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 dev, поэтому я удалил его, но без какой-либо выгоды.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Бета-версия ASP.NET Web API явно не совместима с .NET Framework 4.5 Developer Preview. Смотри http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253802.

Я бы порекомендовал удалить оба и переустановить веб-API после очистки обоих. Я не думаю, что удаление .NET 4.5 после установки Web API поможет.

0 голосов
/ 04 октября 2012

Можно использовать pre-RTM WebAPI после установки VS2012. Добавьте следующее в ваше приложение / 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>

Проблема в том, что RTM-версия System.Net.Http переопределяет предыдущую RTM-версию, поскольку более новая версия находится в GAC, а обнаружение сборочной системы предпочитает более новую версию. Даже если вы explicity ссылаетесь на более старую версию (grrr).

Запись в NewtonSoft не обязательна ...

В любом случае, это сработало для нас.

...