Halo, saya perlu mendapatkan IP klien yang meminta beberapa metode dalam api web, saya telah mencoba menggunakan kode ini dari sini tetapi selalu mengembalikan IP lokal server, bagaimana cara mendapatkannya dengan cara yang benar?
HttpContext.Current.Request.UserHostAddress;
dari pertanyaan lain:
public static class HttpRequestMessageExtensions
{
private const string HttpContext = "MS_HttpContext";
private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";
public static string GetClientIpAddress(this HttpRequestMessage request)
{
if (request.Properties.ContainsKey(HttpContext))
{
dynamic ctx = request.Properties[HttpContext];
if (ctx != null)
{
return ctx.Request.UserHostAddress;
}
}
if (request.Properties.ContainsKey(RemoteEndpointMessage))
{
dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
if (remoteEndpoint != null)
{
return remoteEndpoint.Address;
}
}
return null;
}
}
c#
asp.net
asp.net-web-api
Arbejdsglæde
sumber
sumber
Jawaban:
Tautan berikut mungkin membantu Anda. Berikut kode dari tautan berikut.
referensi: mendapatkan-the-client-ip-via-asp-net-web-api
Cara lain untuk melakukannya ada di bawah.
referensi: cara-mengakses-klien-s-ip-address
Untuk versi yang dihosting web
Untuk dihosting sendiri
sumber
Dengan API Web 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
sumber
Cobalah untuk mendapatkan Ip menggunakan
sumber
Jika Anda menghosting sendiri dengan Asp.Net 2.1 menggunakan paket NuGet OWIN Self-host Anda dapat menggunakan kode berikut:
sumber
Membalas posting lama 4 tahun ini, karena ini tampaknya terlalu rumit bagi saya, setidaknya jika Anda menghosting di IIS dan posting ini sangat tinggi di DuckDuckGo (dan mungkin NSAoogle) untuk "pengontrol api web dapatkan alamat IP".
Inilah cara saya menyelesaikannya:
Tidak seperti OP, ini memberi saya IP klien dan nama host klien, bukan server. Mungkin mereka telah memperbaiki bug sejak itu?
sumber
Lebih baik melemparkannya ke
HttpContextBase
, dengan cara ini Anda dapat mengejek dan mengujinya dengan lebih mudahsumber
Saya pikir ini adalah solusi paling jelas, menggunakan metode ekstensi:
Jadi gunakan saja seperti:
Kami menggunakan ini dalam proyek kami.
Sumber / Referensi: Mengambil alamat IP klien di ASP.NET Web API
sumber
Solusi saya mirip dengan jawaban user1587439, tetapi bekerja langsung pada contoh pengontrol (alih-alih mengakses HttpContext.Current).
Di jendela 'Tonton', saya melihat this.RequestContext.WebRequest berisi properti 'UserHostAddress', tetapi karena ini bergantung pada jenis WebHostHttpRequestContext (yang merupakan internal untuk perakitan 'System.Web.Http') - saya tidak dapat mengaksesnya secara langsung, jadi saya menggunakan refleksi untuk mengaksesnya secara langsung:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
Saya tidak mengatakan itu solusi terbaik. menggunakan refleksi dapat menyebabkan masalah di masa depan dalam kasus peningkatan kerangka kerja (karena perubahan nama), tetapi untuk kebutuhan saya itu sempurna
sumber
Ini berhasil pada saya.
System.Web.HttpContext.Current.Request.UserHostName;
yang satu ini mengembalikan saya pengembalian yang sama yang saya dapatkan dariUserHostAddress
.sumber