System.Net.Http: hilang dari namespace? (menggunakan .net 4.5)


103

TL; DR: Saya baru mengenal bahasa ini dan tidak tahu apa yang saya lakukan

ini kelas saya sejauh ini:

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

ketika saya melakukan csc filename.cs, saya mendapatkan kesalahan berikut:

Jenis atau nama namespace 'Http' tidak ada di namespace 'System.Net' (apakah Anda kehilangan referensi perakitan?)


Anda mencoba mengakses bidang non-statis dari metode statis ( webClientbidang). Selain itu, Anda tidak pernah benar-benar menggunakannya untuk apa pun. Anda mungkin bisa menghapusnya begitu saja.
Cᴏʀʏ

Jawaban:


107

HttpClienttinggal di System.Net.Httpnamespace.

Anda perlu menambahkan:

using System.Net.Http;

Dan pastikan Anda merujuk System.Net.Http.dllpada .NET 4.5.


Kode yang diposting tampaknya tidak ada hubungannya dengan webClient. Apakah ada yang salah dengan kode yang sebenarnya sedang dikompilasi menggunakan HttpWebRequest?


Memperbarui

Untuk membuka Menambahkan referensi dialog klik kanan pada proyek Anda dalam Solution Explorer dan pilih Add Reference ... . Ini akan terlihat seperti:

masukkan deskripsi gambar di sini


9
Saya baru saja menginstal .NET 4.5, dan dikatakan nama namespace 'Http' tidak ada di namespace 'System.Net'
NullVoxPopuli

1
Apakah Anda yakin proyek Anda menargetkan .NET 4.5 dan Anda telah menambahkan referensi ke System.Net.Http.dll?
M.Babcock

3
Um ... tidak, tidak akan. Klik kanan pada proyek Anda di Solution Explorer dan klik Add Referencessaat dialog muncul, pilih tab paling kiri (Saya tidak menggunakan dialog referensi bawaan tetapi milik saya disebut Assemblies ). Gulir daftar hingga Anda melihat item yang disebut System.Net.Httpklik dua kali dan bangun kembali.
M.Babcock

1
Pasti. Berikut beberapa dokumentasi dari MSDN untuk melakukannya. Beri tahu saya jika Anda mengalami masalah.
M.Babcock

1
Apakah Anda sedang mengerjakan solusi dengan banyak proyek? Apakah Anda yakin bahwa perakitan System.Net.Http diinstal dalam proyek yang berisi file yang Anda cari? Anda dapat menyesuaikan project mana yang memuat paket nuget mana di Package Manager
Haymaker87

82

NuGet> paket Microsoft.AspNet.WebApi.Client


4
Ini cukup banyak memecahkan masalah bagi saya. Saya menginstal paket ini: nuget.org/packages/Microsoft.AspNet.WebApi.SelfHost/5.2.2
Boinst

3
Jawaban yang diterima (menambahkan referensi) tidak membantu saya tetapi ini berhasil. Terima kasih.
adinas

1
Ini adalah pendekatan yang tepat untuk diambil. Menambahkan referensi ke dll dapat menimbulkan masalah pada server build. Memiliki paket nuget yang benar akan menyelesaikan masalah.
Darth Coder

15

Bagaimana saya memecahkannya.

  1. Buka proyek (!) "Properti", pilih "Aplikasi", pilih kerangka kerja penargetan ".Net Framework 4.5"
  2. Klik kanan pada proyek Anda -> Tambahkan referensi
  3. Pastikan bahwa di "Assemblies" -> "Extensions" opsi "System.Net.Http" tidak dicentang
  4. Pergi ke "Assemblies" -> "Framework" dan pilih opsi "System.Net.Http" dan "System.Net.Http"
  5. Itu saja!

Dalam kasus saya, saya punya di awal .Net 4.0 dan "Assemblies" -> "Extensions" opsi "System.Net.Http" dengan versi 2.0.0.0. Setelah tindakan saya, "Assemblies" -> "Framework" opsi "System.Net.Http" dan "System.Net.Http" memiliki versi 4.0.0.0 yang sama.


itu masalah bagi saya juga, itu tidak menunjukkan Referensi "System.Net.Http" sampai saya meningkatkan dari .NET 3.5 ke .NET 4.5
FelixJongleur42

10

Konsol Manajer Paket Visual Studio> Instal-Paket Microsoft.AspNet.WebApi.Client


5

Dengan asumsi Anda menggunakan Visual Studio 10, Anda dapat mengunduh penginstalan yang menyertakan System.Net.Http, untuk Visual Studio 10 di sini: unduh MVC4 untuk VS10

Setelah Anda menginstalnya, klik kanan pada folder Referensi di Proyek VS dan kemudian pilih Tambahkan Referensi . Kemudian, pilih tab Telusuri . Arahkan ke jalur pemasangan majelis untuk pemasangan MVC4 (biasanya di Program Files (x86) / Microsoft ASP.NET/ASP.NET MVC4 / assemblies) dan pilih majelis bernama 'System.Net.Http.dll'. Sekarang Anda dapat menambahkan 'using System.Net.Http' di bagian atas kode Anda dan mulai membuat koneksi HttpClient.



3

Anda perlu memiliki Referensi ke System.Web.Httpmajelis yang memiliki HTTPClientkelas, yang Anda coba gunakan. Coba tambahkan baris di bawah ini sebelum deklarasi kelas Anda

using System.Web.Http;

Jika Anda masih mendapatkan Kesalahan, coba lakukan ini di Visual Studio

  1. Klik kanan pada folder Referensi pada proyek Anda.
  2. Pilih Tambahkan Referensi.
  3. Pilih tab .NET (atau pilih tombol Browse jika ini bukan rakitan .NET Framework).
  4. Klik dua kali assembly yang berisi namespace di pesan galat ( System.Web.Http.dll).
  5. Tekan tombol OK.

@TheLindyHop: dapatkah Anda mencoba mengikuti langkah-langkah dalam jawaban yang diperbarui?
Akhil

@Akhil - HttpClientmilik System.Web.Http.dllrakitan .NET 4.5 (bukan System.Net).
M. Babcock

@ M.Babcock: terima kasih telah memberi tahu saya. Saya telah memperbarui Jawaban :)
Akhil

Bagaimana cara menampilkan folder referensi? Saya sudah mulai hanya dengan sebuah file: di luar proyek apa pun = \
NullVoxPopuli

ok, Klik kanan pada Proyek Anda, dan pilih Properties. Anda harus melihat Referencesdi sisi kiri.
Akhil



1

HttpClient baru di .net 4.5. Anda mungkin harus menggunakan HttpWebRequest .


Kode yang termasuk dalam pertanyaan sudah menggunakan HttpWebRequest, meskipun tidak yakin mengapa mereka tidak menggunakannya.
M.Babcock

Sepakat. HTTPClient sedang dideklarasikan, tetapi tidak pernah digunakan. Sangat aneh.
Kibbee

Saya mengalami masalah termasuk namespace untuk itu. menggunakan System.Net.Http; yeilds kesalahan 'Http' tidak ada di namespace 'System.Net'
NullVoxPopuli

Apakah Anda yakin Anda menggunakan compiler .Net 4.5?
Kibbee

0

Untuk memecahkan masalah :

  1. Buka penjelajah solusi Anda.
  2. Klik kanan pada nama proyek dan pilih tambahkan
  3. Pilih referensi dan izinkan file. Net framework 4.5untuk menyelesaikan pemuatan
  4. Gulir ke bawah dan pilih System.Net.Httpdan klik ok.

Masalah terpecahkan.


0

Menjadikan properti "Salin Lokal" Benar untuk referensi telah membantu saya. Perluas Referensi, klik kanan pada System.Net.Http dan ubah nilai properti Salin Lokal ke True di jendela properti. Saya menggunakan VS2019.



0

Dengan Nuget Package Manager instal Microsoft.AspNet.WebApi.Core.

Sesudah ini:

using System.Web.Http;

atau jika Anda menggunakan VB

imports System.Web.Http



-1

Dalam Visual Studio Anda dapat menggunakan nuget untuk memuat paket

Microsoft.AspNet.WebApi.WebHost
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.