2015-06-25 12 views
56

Tôi đang sử dụng ASP.NET Core. Tôi muốn sử dụng HttpClient nhưng tôi nhận thấy rằng có hai gói NuGet đang được cung cấp. Tôi sử dụng cái nào?System.Net.Http vs Microsoft.Net.Http

+0

Có vẻ như 'System.Net.Http' phụ thuộc vào' Microsoft.Net.Http'. Nhưng sau đó một lần nữa, nó phụ thuộc vào những gì bạn đang cố gắng làm với ứng dụng của bạn. –

Trả lời

44

Phụ thuộc vào phiên bản. Các System.Net.Http gói cũ (các 2.0 những người thân) là gói di sản được phản đối ủng hộ Microsoft.Http.Net theo mô tả:

Legacy gói, System.Net.Http hiện nay bao gồm trong 'Microsoft.Net.Http 'gói.

Chúng tồn tại để cung cấp HttpClient trong các phiên bản .NET trước đó và Thư viện lớp di động. Bạn nên sử dụng Microsoft.Net.Http trong trường hợp đó.

Vì bạn đang sử dụng .NET Core, bạn nên sử dụng gói System.Net.Http mới nhất (ví dụ 4.3.3).

Cập nhật cho csproj

Tính NET Chuẩn 2.0, gói System.Net.HttpClient đã được bao gồm và có sẵn khi bạn nhắm mục tiêu netstandard2.0. Nếu vì một lý do nào bạn vẫn muốn tham khảo nó cho cả đầy đủ .NET và .NET Lõi bạn có thể thêm video này vào tập tin csproj của bạn:

<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> 

Nếu bạn đang sử dụng project.json

Nếu project.json của bạn nhắm mục tiêu cả .NET và .NET Core đầy đủ, bạn phải thêm assembly System.Net.Http vào phần tử frameworkAssemblies. Ví dụ:

"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

Hãy lưu ý rằng họ không có hành vi giống hệt nhau. Phiên bản .NET đầy đủ (4.0.0.0) không tự động nén, trong khi phiên bản .NET Core (4.1.0) có. Vì vậy, nếu bạn sử dụng phiên bản .NET đầy đủ, bạn phải tự cấu hình trình xử lý để sử dụng gzip/deflate compression. Mô tả: https://github.com/dotnet/docs/issues/1054 –

+14

Câu trả lời này tóm tắt những gì một mớ hỗn độn này đã trở thành với .NET Core, .NET Standard và .NET Framework. – Vincent

+0

@vincent Nó không còn là một nỗi đau trong ass hơn là khi mọi người sử dụng mono vv. Nhiều nền tảng luôn có một số điểm đau. – rolls

6

Microsoft.Net.Http đòi hỏi thêm Microsoft.Bcl phụ thuộc.

Đối với điều đó, nếu bạn chỉ nhắm mục tiêu .NET Framework hoặc .NET Core, System.Net.Http thì tốt. Nếu không, Microsoft.Net.Http sẽ là lựa chọn tốt hơn vì nó có thể là thế hệ tiếp theo.

+5

Có vẻ rằng MS đã thay đổi tâm trí của họ như bài này ám chỉ ... https: //stackoverflow.com/questions/39016373/the-current-status-of-system-net-http-vs-microsoft-net-http microsoft .net.http chưa được cập nhật từ năm 2015 trong khi system.net.http chỉ là một vài tháng sago (nuget). – smoore4

Các vấn đề liên quan