Estou usando o ASP.NET Core. Eu quero usar, HttpClient
mas percebi que há dois pacotes NuGet sendo oferecidos. Qual eu uso?
c#
asp.net-core
nuget
asp.net-core-mvc
httpclient
Muhammad Rehan Saeed
fonte
fonte
System.Net.Http
depende deMicrosoft.Net.Http
. Mas, novamente, depende do que você está tentando fazer com seu aplicativo.Respostas:
Depende da versão. Os
System.Net.Http
pacotes antigos (os 2.0 ) são pacotes legados que estão obsoletos deMicrosoft.Http.Net
acordo com a descrição:Eles existem para fornecer as
HttpClient
versões anteriores do .NET e bibliotecas de classes portáteis. Você deve usarMicrosoft.Net.Http
nesse caso.Como está usando o .NET Core, você deve usar o
System.Net.Http
pacote mais recente (por exemplo, 4.3.3).Atualizado para csproj
A partir do .NET Standard 2.0, o
System.Net.HttpClient
pacote já está incluído e disponível quando você direcionarnetstandard2.0
. Se, por algum motivo, você ainda quiser referenciá-lo para .NET completo e .NET Core, poderá adicioná-lo ao seu arquivo 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>
Se você estiver usando project.json
Se o seu project.json for direcionado para .NET e .NET Core completos, você terá que adicionar o
System.Net.Http
assembly aoframeworkAssemblies
elemento. Por exemplo:"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 } } }
fonte
System.Net.Http
agora está incluído noMicrosoft.Net.Http
pacote." idioma ao qual você está se referindo na descrição do pacote. Na verdade, oSystem.Net.Http
pacote parece ter sido atualizado mais recentemente (por vários anos)Para qualquer pessoa interessada em mais informações sobre isso, Immo Landwerth (gerente de programa em .NET na Microsoft) tuitou sobre isso:
"O HttpClient começou como um pacote NuGet (fora da banda) e foi adicionado ao .NET Framework no 4.5 também (na caixa).
Com o .NET Core / .NET Standard, originalmente tentamos modelar a plataforma .NET como um conjunto de pacotes em que estar dentro da caixa ou fora da banda não importava mais. No entanto, isso foi mais confuso e complicado do que prevíamos.
Como resultado, abandonamos em grande parte a ideia de modelar a plataforma .NET como um gráfico NuGet com Core / Standard 2.0.
A resposta geral é:
Com o .NET Core 2.0 e .NET Standard 2.0, você não precisa fazer referência ao pacote SystemNetHttpClient NuGet. No entanto, ele pode ser retirado das dependências 1.x.
O mesmo vale para o .NET Framework: se você pretende 4.5 e superior, geralmente deve usar a versão na caixa em vez do pacote NuGet. Novamente, você pode acabar puxando-o para dependências do .NET Standard 1.xe PCL, mas o código escrito diretamente no .NET Framework não deve usá-lo.
Então, por que o pacote ainda existe / por que ainda o atualizamos? Simplesmente porque queremos fazer o código existente funcionar que dependeu dele. No entanto, como você descobriu, isso não é fácil no .NET Framework.
O modelo pretendido para o pacote legado é: se você consumir o pacote do .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+, o pacote apenas encaminha para a implementação fornecida pela plataforma, em vez de trazer sua própria versão.
Porém, isso não é o que realmente acontece em todos os casos: o pacote do cliente HTTP substituirá (parcialmente) os componentes embutidos no .NET Framework que funcionam para alguns clientes e falham para outros. Portanto, não podemos resolver o problema facilmente agora.
Além disso, temos os problemas usuais de vinculação com o .NET Framework, portanto, isso só funciona bem se você adicionar redirecionamentos de vinculação. Yay!
Portanto, como autor de uma biblioteca, minha recomendação é evitar depender desse pacote e preferir as versões embutidas no .NET Framework 4.5, .NET Core 2.0 e .NET Standard 2.0. "
https://twitter.com/terrajobst/status/997262020108926976
fonte
Microsoft.Net.Http
requerMicrosoft.Bcl
dependências adicionais .Para isso, se você está direcionado apenas ao .NET Framework ou .NET Core,
System.Net.Http
está pronto para prosseguir. Caso contrário,Microsoft.Net.Http
seria a melhor escolha, pois poderia ser a próxima geração.fonte