System.Net.Http: หายไปจากเนมสเปซ? (โดยใช้. net 4.5)


103

TL; DR: ฉันยังใหม่กับภาษานี้และไม่รู้ว่าฉันกำลังทำอะไรอยู่

นี่คือชั้นเรียนของฉันจนถึงตอนนี้:

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();
        }
}

เมื่อฉันทำ csc filename.cs ฉันได้รับข้อผิดพลาดต่อไปนี้:

ประเภทหรือชื่อเนมสเปซ 'Http' ไม่มีอยู่ในเนมสเปซ 'System.Net' (คุณไม่มีการอ้างอิงแอสเซมบลีหรือไม่)


คุณกำลังพยายามเข้าถึงฟิลด์ที่ไม่คงที่จากวิธีการแบบคงที่ ( webClientฟิลด์) นอกจากนี้คุณไม่เคยใช้มันเพื่ออะไรเลย คุณอาจจะลบออกก็ได้
Cᴏʀʏ

คำตอบ:


108

HttpClient อาศัยอยู่ใน System.Net.Httpเนมสเปซ

คุณจะต้องเพิ่ม:

using System.Net.Http;

และตรวจสอบให้แน่ใจว่าคุณกำลังอ้างอิงSystem.Net.Http.dllใน. NET 4.5


รหัสที่โพสต์ดูเหมือนจะไม่ทำอะไรwebClientเลย มีบางอย่างผิดปกติกับโค้ดที่คอมไพล์โดยใช้จริงHttpWebRequestหรือไม่?


อัปเดต

เพื่อเปิดเพิ่มการอ้างอิงโต้ตอบคลิกขวาที่โครงการของคุณในExplorer โซลูชันและเลือกเพิ่มการอ้างอิง ... ควรมีลักษณะดังนี้:

ป้อนคำอธิบายภาพที่นี่


9
ฉันเพิ่งติดตั้ง. NET 4.5 และมันบอกว่าชื่อเนมสเปซ 'Http' ไม่มีอยู่ในเนมสเปซ 'System.Net'
NullVoxPopuli

1
คุณแน่ใจโครงการของคุณกำหนดเป้าหมาย .NET 4.5 และที่คุณได้เพิ่มการอ้างอิงไปยังSystem.Net.Http.dll?
M.Babcock

3
อืม ... ไม่มันจะไม่ คลิกขวาที่โครงการของคุณในExplorer โซลูชันและคลิกAdd Referencesเมื่อปรากฏโต้ตอบเลือกแท็บที่เหลือส่วนใหญ่ (ฉันไม่ได้ใช้ในตัวอ้างอิงโต้ตอบ แต่ของผมจะเรียกว่าแบบประกอบ ) เลื่อนรายการจนกว่าคุณจะเห็นรายการที่เรียกว่าSystem.Net.Httpดับเบิลคลิกและสร้างใหม่
M.Babcock

1
แน่นอน. นี่คือเอกสารบางส่วนจาก MSDN สำหรับการทำ โปรดแจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ
M.Babcock

1
คุณกำลังทำงานในโซลูชันกับหลายโครงการหรือไม่? คุณแน่ใจหรือไม่ว่ามีการติดตั้งแอสเซมบลี System.Net.Http ในโปรเจ็กต์ซึ่งมีไฟล์ที่คุณกำลังดูอยู่ คุณสามารถปรับเปลี่ยนโปรเจ็กต์ที่โหลดแพ็กเกจที่ได้รับใน Package Manager
Haymaker87

82

NuGet> แพ็คเกจ Microsoft.AspNet.WebApi.Client


4
สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้ดีทีเดียว ผมติดตั้งแพคเกจนี้: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
คำตอบที่ยอมรับ (การเพิ่มข้อมูลอ้างอิง) ไม่ได้ช่วยฉัน แต่สิ่งนี้ทำได้ ขอบคุณ.
adinas

1
นี่คือแนวทางที่ถูกต้องในการดำเนินการ การเพิ่มการอ้างอิงไปยัง dll อาจก่อให้เกิดปัญหาบนบิลด์เซิร์ฟเวอร์ การมีแพ็กเกจนักเก็ตที่ถูกต้องจะช่วยแก้ปัญหาได้
Darth Coder

16

ฉันจะแก้ไขมันอย่างไร

  1. เปิดโครงการ (!) "Properties" เลือก "Application" เลือก Target Framework ".Net Framework 4.5"
  2. คลิกขวาที่โครงการของคุณ -> เพิ่มการอ้างอิง
  3. ตรวจสอบให้แน่ใจว่าใน "Assemblies" -> "Extensions" option "System.Net.Http" ไม่ถูกเลือก
  4. ไปที่ "Assemblies" -> "Framework" แล้วเลือกตัวเลือก "System.Net.Http" และ "System.Net.Http"
  5. นั่นคือทั้งหมด!

ในกรณีของฉันฉันมีที่จุดเริ่มต้น. Net 4.0 และ "Assemblies" -> ตัวเลือก "ส่วนขยาย" "System.Net.Http" กับเวอร์ชัน 2.0.0.0 หลังจากการกระทำของฉัน "Assemblies" -> ตัวเลือก "Framework" "System.Net.Http" และ "System.Net.Http" มีเวอร์ชัน 4.0.0.0 เหมือนกัน


นั่นเป็นปัญหาสำหรับฉันเช่นกันมันไม่แสดง Reference "System.Net.Http" จนกว่าฉันจะอัปเกรดจาก. NET 3.5 เป็น. NET 4.5
FelixJongleur42


5

สมมติว่าคุณใช้ Visual Studio 10 คุณสามารถดาวน์โหลดการติดตั้งที่มี System.Net.Http สำหรับ Visual Studio 10 ได้ที่นี่: ดาวน์โหลด MVC4 สำหรับ VS10

เมื่อคุณได้ติดตั้งมันคลิกขวาที่อ้างอิงโฟลเดอร์ในโครงการ VS แล้วเลือกเพิ่มการอ้างอิง จากนั้นเลือกแท็บเรียกดู ไปที่พา ธ การติดตั้งแอสเซมบลีสำหรับการติดตั้ง MVC4 (โดยปกติจะอยู่ใน Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / แอสเซมบลี) และเลือกแอสเซมบลีชื่อ 'System.Net.Http.dll' ตอนนี้คุณสามารถเพิ่ม 'โดยใช้ System.Net.Http' ที่ด้านบนของโค้ดของคุณและเริ่มสร้างการเชื่อมต่อ HttpClient



3

คุณจำเป็นต้องมี Reference ไปยังSystem.Web.Httpแอสเซมบลีที่มีHTTPClientคลาสที่คุณพยายามใช้ ลองเพิ่มบรรทัดด้านล่างก่อนการประกาศชั้นเรียนของคุณ

using System.Web.Http;

หากคุณยังคงได้รับข้อผิดพลาดให้ลองทำสิ่งนี้ใน Visual Studio

  1. คลิกขวาที่โฟลเดอร์อ้างอิงในโครงการของคุณ
  2. เลือกเพิ่มการอ้างอิง
  3. เลือกแท็บ. NET (หรือเลือกปุ่มเรียกดูหากไม่ใช่ชุดประกอบ. NET Framework)
  4. คลิกสองครั้งที่แอสเซมบลีที่มีเนมสเปซในข้อความแสดงข้อผิดพลาด ( System.Web.Http.dll)
  5. กดปุ่ม OK

@TheLindyHop: คุณลองทำตามขั้นตอนในคำตอบที่อัปเดตได้ไหม
Akhil

@Akhil - HttpClientเป็นของSystem.Web.Http.dllแอสเซมบลี. NET 4.5 (ไม่ใช่System.Net)
M.Babcock

@ M.Babcock: ขอบคุณที่แจ้งให้เราทราบ ฉันได้อัปเดตคำตอบ :)
Akhil

ฉันจะทำให้โฟลเดอร์อ้างอิงปรากฏขึ้นได้อย่างไร ฉันเริ่มต้นด้วยไฟล์: นอกโปรเจ็กต์ใด ๆ = \
NullVoxPopuli

Propertiesตกลงคลิกขวาที่โครงการของคุณและเลือก คุณควรเห็นReferencesทางด้านซ้ายมือ
Akhil



1

HttpClientใหม่ใน. net 4.5 คุณอาจจะต้องใช้HttpWebRequest


รหัสที่รวมอยู่ในคำถามใช้แล้วHttpWebRequestไม่แน่ใจว่าทำไมถึงไม่ใช้รหัสนี้
M.Babcock

เห็นด้วย กำลังประกาศ HTTPClient แต่ไม่เคยใช้ แปลกมาก.
Kibbee

ฉันมีปัญหารวมถึงเนมสเปซสำหรับมัน ใช้ System.Net.Http; พบข้อผิดพลาด 'Http' ไม่มีอยู่ในเนมสเปซ 'System.Net'
NullVoxPopuli

แน่ใจหรือว่าใช้คอมไพเลอร์. Net 4.5
Kibbee

0

วิธีแก้ปัญหา:

  1. ไปที่เครื่องมือสำรวจโซลูชันของคุณ
  2. คลิกขวาที่ชื่อโครงการแล้วเลือกเพิ่ม
  3. เลือกการอ้างอิงและอนุญาตไฟล์. Net framework 4.5เพื่อสิ้นสุดการโหลด
  4. เลื่อนลงไปเลือกSystem.Net.Httpแล้วคลิกตกลง

แก้ไขปัญหา.


0

การทำให้คุณสมบัติ "Copy Local" เป็น True สำหรับการอ้างอิงนั้นทำเพื่อฉัน ขยายการอ้างอิงคลิกขวาที่ System.Net.Http และเปลี่ยนค่าของคุณสมบัติ Copy Local เป็น True ในหน้าต่างคุณสมบัติ ฉันใช้ VS2019




0

ฉันมีปัญหานี้หลังจากอัปเกรดเป็น. NET Framework 4.7.2 ฉันพบว่าไม่แนะนำแพ็คเกจ Nuget สำหรับ System.Net.Http อีกต่อไป นี่คือวิธีแก้ปัญหา:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.