Bisakah Anda memberi tahu saya cara mendapatkan alamat IP klien di ASP.NET saat menggunakan MVC 6. Request.ServerVariables["REMOTE_ADDR"]
tidak berfungsi.
c#
asp.net-core
asp.net-core-mvc
Eadam
sumber
sumber
httpContext.GetFeature<IHttpConnectionFeature>().RemoteIpAddress
Jawaban:
API telah diperbarui. Tidak yakin kapan itu berubah tetapi menurut Damien Edwards pada akhir Desember, Anda sekarang dapat melakukan ini:
sumber
RemoteIpAddress
selalunull
untuk saya, ketika saya mempublikasikan situs webnya di IIS dan mencatatnya di file.Dalam project.json menambahkan ketergantungan ke:
Di
Startup.cs
, dalamConfigure()
metode ini tambahkan:Dan tentu saja:
Lalu, saya bisa mendapatkan ip dengan menggunakan:
Dalam kasus saya, ketika debugging di VS saya selalu menjadi localhost IpV6, tetapi ketika digunakan pada IIS saya selalu mendapatkan IP jarak jauh.
Beberapa tautan bermanfaat: Bagaimana cara saya mendapatkan alamat IP klien di ASP.NET CORE? dan RemoteIpAddress selalu nol
The
::1
adalah mungkin karena:sumber
Beberapa logika fallback dapat ditambahkan untuk menangani keberadaan Load Balancer.
Selain itu, melalui inspeksi,
X-Forwarded-For
tajuk tetap disetel meskipun tanpa Load Balancer (mungkin karena lapisan Kestrel tambahan?):Asumsi
_httpContextAccessor
diberikan melalui DI.sumber
Anda dapat menggunakan
IHttpConnectionFeature
untuk mendapatkan informasi ini.sumber
httpContext.GetFeature<IHttpConnectionFeature>()
selalu demikiannull
.sumber
HttpContext.Connection.RemoteIpAddress
.Di ASP.NET 2.1, Di StartUp.cs Tambahkan Layanan Ini:
dan kemudian lakukan 3 langkah:
Tentukan variabel dalam pengontrol MVC Anda
DI ke dalam konstruktor pengendali
Ambil kembali Alamat IP
Ini adalah bagaimana hal itu dilakukan.
sumber
::1
adalah localhost di IPv6. Setara IPv4 dari127.0.0.1
Ini berfungsi untuk saya (DotNetCore 2.1)
sumber
Dalam kasus saya, saya memiliki Aplikasi Web DotNet Core 2.2 yang berjalan di DigitalOcean dengan docker dan nginx sebagai proxy terbalik. Dengan kode ini di Startup.cs saya bisa mendapatkan IP klien
:: ffff: 172.17.0.1 adalah ip yang saya dapatkan sebelum menggunakan
sumber
Pertama, di .Net Core 1.0 Tambahkan
using Microsoft.AspNetCore.Http.Features;
ke controller Kemudian di dalam metode yang relevan:Saya membaca beberapa jawaban lain yang gagal dikompilasi karena menggunakan httpContext huruf kecil, memimpin VS untuk menambahkan menggunakan Microsoft.AspNetCore.Http, bukan menggunakan yang sesuai, atau dengan HttpContext (kompiler juga menyesatkan).
sumber
dapatkan ipaddress dan hostname di .net core
letakkan kode ini di controller
Ikuti langkah ini:
sumber
Saya menemukan bahwa, beberapa dari Anda menemukan bahwa alamat IP yang Anda dapatkan adalah ::: 1 atau 0.0.0.1
Ini adalah masalah karena Anda mencoba untuk mendapatkan IP dari mesin Anda sendiri, dan kebingungan C # yang mencoba mengembalikan IPv6.
Jadi, saya menerapkan jawaban dari @Johna ( https://stackoverflow.com/a/41335701/812720 ) dan @David ( https://stackoverflow.com/a/8597351/812720 ), Terima kasih kepada mereka!
dan di sini untuk solusinya:
tambahkan Paket Microsoft.AspNetCore.HttpOverrides di Referensi Anda (Ketergantungan / Paket)
tambahkan baris ini di Startup.cs
untuk mendapatkan IPAddress, gunakan kode ini di Controller.cs Anda
dan sekarang Anda bisa mendapatkan alamat IPv4 dari remoteIpAddress atau hasilnya
sumber
coba ini.
sumber
Berjalan
.NET core
(3.1.4) diIIS
belakang Load balancer tidak berfungsi dengan solusi yang disarankan lainnya.Membaca
X-Forwarded-For
header secara manual tidak.Saya menjalankan paket mandiri menggunakan bundel hosting .
sumber
Menjalankan ASP.NET Core 2.1 di belakang Proxy reverse Traefik di Ubuntu, saya perlu mengatur IP gateway
KnownProxies
setelah menginstalMicrosoft.AspNetCore.HttpOverrides
paket resmiMenurut dokumentasi , ini diperlukan jika proxy terbalik tidak berjalan di localhost. The
docker-compose.yml
dari Traefik telah diberi alamat IP statis:Atau, itu harus cukup untuk memastikan jaringan yang dikenal didefinisikan di sini untuk menentukan gateway di .NET Core.
sumber