System.Net.Http: bị thiếu trong vùng tên? (sử dụng .net 4.5)


103

TL; DR: Tôi mới làm quen với ngôn ngữ này và không biết mình đang làm gì

đây là lớp học của tôi cho đến nay:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;

public class MyClass
    {
        private const string URL = "https://sub.domain.com/objects.json?api_key=123";
        private const string data = @"{""object"":{""name"":""Title""}}";

        public static void CreateObject()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
            requestWriter.Write(data);
            requestWriter.Close();

            try
            {
                // get the response
                WebResponse webResponse = request.GetResponse();
                Stream webStream = webResponse.GetResponseStream();
                StreamReader responseReader = new StreamReader(webStream);
                string response = responseReader.ReadToEnd();
                responseReader.Close();
            }
            catch (WebException we)
            {
                string webExceptionMessage = we.Message;
            }
            catch (Exception ex)
            {
                // no need to do anything special here....
            }
        }

        static void Main(string[] args)
        {
            MyClass.CreateObject();
        }
}

khi tôi thực hiện csc filename.cs, tôi gặp lỗi sau:

Loại hoặc tên không gian tên 'Http' không tồn tại trong không gian tên 'System.Net' (bạn có thiếu tham chiếu hợp ngữ không?)


Bạn đang cố gắng truy cập một trường không tĩnh từ một phương thức tĩnh ( webClienttrường). Ngoài ra, bạn không bao giờ thực sự sử dụng nó cho bất cứ điều gì. Bạn có thể chỉ cần loại bỏ nó.
Cᴏʀʏ

Câu trả lời:


107

HttpClientsống trong System.Net.Httpkhông gian tên.

Bạn sẽ cần thêm:

using System.Net.Http;

Và đảm bảo rằng bạn đang tham chiếu System.Net.Http.dlltrong .NET 4.5.


Mã được đăng có vẻ như không liên quan gì đến webClient. Có điều gì đó sai với mã đang thực sự biên dịch bằng cách sử dụng HttpWebRequest?


Cập nhật

Để mở Add Reference thoại nhấp chuột phải vào dự án của bạn trong Solution Explorer và chọn Add Reference ... . Nó sẽ trông giống như sau:

nhập mô tả hình ảnh ở đây


9
Tôi chỉ cần cài đặt .NET 4.5, và nó nói tên không gian tên 'Http' không tồn tại trong không gian tên 'System.Net'
NullVoxPopuli

1
Bạn có chắc chắn dự án của mình đang nhắm mục tiêu .NET 4.5 và bạn đã thêm tham chiếu vào System.Net.Http.dllkhông?
M.Babcock

3
Ừm ... không sẽ không. Nhấp chuột phải vào dự án của bạn trong Solution Explorer và nhấp Add Referenceskhi hộp thoại xuất hiện, chọn tab bên trái nhất (Tôi không sử dụng hộp thoại tham chiếu tích hợp nhưng của tôi được gọi là Assemblies ). Cuộn danh sách cho đến khi bạn thấy một mục được gọi là System.Net.Httpnhấp đúp vào nó và tạo lại.
M.Babcock

1
Chắc chắn. Đây là một số tài liệu từ MSDN để làm điều đó. Hãy cho tôi biết nếu bạn gặp bất kỳ rắc rối nào.
M.Babcock

1
Bạn đang làm việc trong một giải pháp với nhiều dự án? Bạn có chắc chắn rằng lắp ráp System.Net.Http được cài đặt trong dự án chứa tệp bạn đang xem không? Bạn có thể điều chỉnh dự án nào tải gói nuget nào trong Trình quản lý gói
Haymaker87

82

Gói NuGet> Microsoft.AspNet.WebApi.Client


4
Điều này giải quyết khá nhiều vấn đề cho tôi. Tôi đã cài đặt gói này: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
Câu trả lời được chấp nhận (thêm một tài liệu tham khảo) đã không giúp tôi nhưng điều này đã làm. Cảm ơn.
adinas

1
Đây là cách tiếp cận chính xác để thực hiện. Việc thêm tham chiếu vào dll có thể gây ra sự cố trên máy chủ xây dựng. Có gói nuget chính xác sẽ giải quyết được vấn đề.
Darth Coder

15

Làm thế nào tôi đã giải quyết nó.

  1. Mở dự án (!) "Thuộc tính", chọn "Ứng dụng", chọn khung nhắm mục tiêu ".Net Framework 4.5"
  2. Nhấp chuột phải vào dự án của bạn -> Thêm tài liệu tham khảo
  3. Đảm bảo rằng trong tùy chọn "Assemblies" -> "Extensions" "System.Net.Http" được bỏ chọn
  4. Đi tới "Assemblies" -> "Framework" và chọn các tùy chọn "System.Net.Http" và "System.Net.Http"
  5. Đó là tất cả!

Trong trường hợp của tôi, lúc đầu tôi có .Net 4.0 và tùy chọn "Assemblies" -> "Phần mở rộng" "System.Net.Http" với phiên bản 2.0.0.0. Sau các thao tác của tôi "Assemblies" -> "Framework", các tùy chọn "System.Net.Http" và "System.Net.Http" có cùng phiên bản 4.0.0.0.


đó là vấn đề đối với tôi là tốt, nó không được thể hiện tham khảo "System.Net.Http" cho đến khi tôi nâng cấp từ .NET 3.5 để NET 4.5
FelixJongleur42

10

Bảng điều khiển Trình quản lý Gói Visual Studio> Gói Cài đặt Microsoft.AspNet.WebApi.Client


5

Giả sử rằng bạn đang sử dụng Visual Studio 10, bạn có thể tải xuống bản cài đặt bao gồm System.Net.Http, cho Visual Studio 10 tại đây: tải xuống MVC4 cho VS10

Khi bạn đã cài đặt xong, hãy nhấp chuột phải vào thư mục References trong VS Project và sau đó chọn Add Reference . Sau đó, chọn tab Duyệt qua . Điều hướng đến lắp ráp cài đặt đường dẫn cho các MVC4 cài đặt (thường là trong Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / cụm) và chọn assembly có tên là 'System.Net.Http.dll'. Bây giờ bạn có thể thêm 'using System.Net.Http' ở đầu mã và bắt đầu tạo kết nối HttpClient.



3

Bạn cần có một Tham chiếu đến hợp System.Web.Httpngữ có HTTPClientlớp, bạn đang cố gắng sử dụng. Hãy thử thêm dòng dưới đây trước phần khai báo lớp của bạn

using System.Web.Http;

Nếu bạn vẫn gặp lỗi, hãy thử làm điều này trong Visual Studio

  1. Nhấp chuột phải vào thư mục Tài liệu tham khảo trong dự án của bạn.
  2. Chọn Thêm tài liệu tham khảo.
  3. Chọn tab .NET (hoặc chọn nút Duyệt nếu nó không phải là một tổ hợp .NET Framework).
  4. Bấm đúp vào hợp ngữ chứa không gian tên trong thông báo lỗi ( System.Web.Http.dll).
  5. Nhấn nút OK.

@TheLindyHop: bạn có thể thử làm theo các bước trong câu trả lời được cập nhật không?
Akhil

@Akhil - HttpClientthuộc về System.Web.Http.dlllắp ráp .NET 4.5 (không phải System.Net).
M.Babcock

@ M.Babcock: cảm ơn đã cho tôi biết. Ive đã cập nhật Câu trả lời :)
Akhil

Làm cách nào để hiển thị thư mục tài liệu tham khảo? Tôi chỉ bắt đầu với một tệp: bên ngoài bất kỳ dự án nào = \
NullVoxPopuli Ngày

ok, nhấp chuột phải vào Dự án của bạn và chọn Properties. Bạn nên thấyReferences ở phía bên tay trái.
Akhil



1

HttpClient mới trong .net 4.5. Có lẽ bạn nên sử dụng HttpWebRequest .


Mã có trong câu hỏi đã được sử dụng HttpWebRequest, tuy nhiên, không chắc tại sao họ không sử dụng nó.
M.Babcock

Đã đồng ý. HTTPClient đang được khai báo, nhưng không bao giờ được sử dụng. Rất kỳ quặc.
Kibbee

Tôi đang gặp sự cố bao gồm cả không gian tên cho nó. sử dụng System.Net.Http; yeilds lỗi 'Http' không tồn tại trong không gian tên 'System.Net'
NullVoxPopuli

Bạn có chắc mình đang sử dụng trình biên dịch .Net 4.5 không?
Kibbee

0

Để giải quyết vấn đề:

  1. Đi tới trình khám phá giải pháp của bạn.
  2. Nhấp chuột phải vào tên dự án và chọn thêm
  3. Chọn tài liệu tham khảo và cho phép. Net framework 4.5để hoàn thành tải
  4. Cuộn xuống và chọn System.Net.Httpvà nhấp vào ok.

Vấn đề đã được giải quyết.


0

Đặt thuộc tính "Copy Local" thành True cho tham chiếu đã giúp tôi. Mở rộng Tham chiếu, nhấp chuột phải vào System.Net.Http và thay đổi giá trị của thuộc tính Copy Local thành True trong cửa sổ thuộc tính. Tôi đang sử dụng VS2019.


0

Đảm bảo rằng nó được tham chiếu trong web.config của bạn:


0

Với Trình quản lý gói Nuget, hãy cài đặt Microsoft.AspNet.WebApi.Core.

Sau đây:

using System.Web.Http;

hoặc nếu bạn sử dụng VB

imports System.Web.Http



-1

Trong Visual Studio, bạn có thể sử dụng nuget để tải gói

Microsoft.AspNet.WebApi.WebHost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.