2015-06-25 4 views
56

Я использую ASP.NET Core. Я хочу использовать HttpClient, но я заметил, что предлагаются два пакета NuGet. Какой из них я использую?System.Net.Http vs Microsoft.Net.Http

+0

Похоже, что 'System.Net.Http' зависит от' Microsoft.Net.Http'. Но опять же, это зависит от того, что вы пытаетесь сделать с вашим приложением. –

ответ

44

В зависимости от версии. Старые System.Net.Http пакеты (в 2.0 них) являются устаревшие пакеты, которые устаревшее в пользу Microsoft.Http.Net согласно описанию:

Наследства пакет, System.Net.Http теперь входит в «Microsoft.Net.Http пакет.

Они существуют, чтобы предоставить HttpClient в предыдущих версиях .NET и портативных классах. В этом случае вы должны использовать Microsoft.Net.Http.

Поскольку вы используете .NET Core, вы должны использовать последний пакет System.Net.Http (например, 4.3.3).

Обновлено для csproj

По .NET Standard 2.0, пакет System.Net.HttpClient уже включен и доступен, когда вы целевой netstandard2.0. Если по каким-то причинам вы все еще хотите, чтобы ссылаться на него как для полной версии .NET и .NET Ядра Вы можете добавить это в файл csproj:

<ItemGroup Condition=" '$(TargetFramework)' == 'net461' "> 
    <!-- // HttpClient for full .NET --> 
    <Reference Include="System.Net.Http" /> 
</ItemGroup> 
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' "> 
    <!-- // HttpClient for .NET Core --> 
    <PackageReference Include="System.Net.Http" Version="4.3.3" /> 
</ItemGroup> 

Если вы используете project.json

Если ваш проект.json нацелен как на полный .NET, так и на .NET Core, вам необходимо добавить узел System.Net.Http в элемент frameworkAssemblies. Например:

"frameworks": { 
    "net451": { 
    "frameworkAssemblies": { 
     "System.Net.Http": "4.0.0.0" // HttpClient for full .NET 
    } 
    }, 
    "netstandard1.3": { 
    "dependencies": { 
     "System.Net.Http": "4.1.0", // HttpClient for .NET Core 
    } 
    } 
} 
+1

Имейте в виду, что они не имеют такого же поведения. Полная версия .NET (4.0.0.0) не выполняет автоматическое сжатие, тогда как .NET Core версии (4.1.0). Поэтому, если вы используете полную версию .NET, вы должны вручную настроить обработчик для использования сжатия gzip/deflate. Описание: https://github.com/dotnet/docs/issues/1054 –

+14

Этот ответ подводит итог тому, что из этого стало с .NET Core, .NET Standard и .NET Framework. – Vincent

+0

@ vincent Это больше не боль в заднице, чем когда люди пользовались моно и т. Д. На мультиплатформе всегда есть некоторые болевые точки. – rolls

6

Microsoft.Net.Http требует дополнительных Microsoft.Bcl зависимостей.

Для этого, если вы нацелены только на платформу .NET Framework или .NET Core, System.Net.Http - это хорошо. В противном случае Microsoft.Net.Http будет лучшим выбором, поскольку это может быть следующее поколение.

+5

Кажется, что MS изменила свое мнение, поскольку это сообщение ссылается на ... https: //stackoverflow.com/questions/39016373/the-current-status-of-system-net-http-vs-microsoft-net-http microsoft .net.http не обновлялся с 2015 года, а system.net.http - всего несколько месяцев sago (nuget). – smoore4

Смежные вопросы