Rešeno: net core dobija udaljeni ip

Naravno, hajde da počnemo sa razgovorom o .NET Core-u i problemu dobijanja udaljene IP adrese.

.NET Core je besplatna platforma za programere na više platformi otvorenog koda za izradu mnogih vrsta aplikacija, uključujući web aplikacije i usluge. Međutim, dobijanje udaljene IP adrese u .NET Core aplikaciji ponekad može predstavljati izazov. Ovo je važno jer pristup IP adresi klijenta omogućava poboljšano evidentiranje, personalizirano iskustvo i još mnogo toga.

Da bismo ovo riješili, možemo koristiti HttpContext koji obezbjeđuju ugrađene biblioteke .NET Core-a.

Implementacija rješenja

Počinjemo tako što pristupamo HttpContext u metodi kontrolera gdje nam je potrebna IP adresa klijenta. The HttpContext objekat sadrži informacije specifične za HTTP o pojedinačnom HTTP zahtjevu.

javni IActionResult Index()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// dodatna logika…
}

Time dobijate klijentovo IP adresa. Metoda HttpContext.Connection.RemoteIpAddress vraća IP adresu udaljenog klijenta. Međutim, imajte na umu da ovo možda neće uvijek vratiti očekivani rezultat, posebno kada je vaš poslužitelj iza balansera opterećenja ili koristi međuverski program za prosljeđivanje zaglavlja.

Dublje razumijevanje kodeksa

Navedeni C# kod koristi HttpContext objekt, koji je svojstvo ControllerBasea i sadrži informacije o HTTP zahtjevu. Ovo uključuje stavke kao što su informacije o hostu, detalji o putanji i vrlo važno svojstvo Connection.

Svojstvo Connection je tipa ConnectionInfo, iz Microsoft.AspNetCore.Http.Features imenskog prostora. Između ostalih svojstava, sadrži `RemoteIpAddress`, svojstvo koje dohvaća IP adresu iz HTTP zahtjeva.

Međutim, server može biti iza balansera opterećenja ili proxyja. Ovi posrednici mogu promijeniti izvorne informacije HTTP zahtjeva, uključujući izvor IP adresa. Kada se to dogodi, svojstvo `RemoteIpAddress` daje IP adresu posredničkog uređaja, a ne originalnu klijentovu.

Rješenje 'Proslijeđeni zaglavlja Middleware'

Za aplikacije koje rade iza takvih posrednika, .NET Core pruža `ForwardedHeadersMiddleware`, međuverski softver koji radi sa zaglavljima 'X-Forwarded-*' za čuvanje originalnih detalja HTTP zahtjeva.

Da biste omogućili `ForwardedHeadersMiddleware`, dodajte sljedeću konfiguraciju vašoj Startup.cs klasi.

public void Configure (IApplicationBuilder aplikacija, IWebHostEnvironment env)
{
app.UseForwardedHeaders(nove ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});

//…
}

Korištenje HttpContext i proslijeđenih zaglavlja

Zatim možete nastaviti da koristite HttpContext.Connection.RemoteIpAddress kao i prije, ali sada, kada je dostupna, vratit će IP adresu klijenta ispravno, čak i ako je server iza proxyja ili balansera opterećenja.

Zapamtite da u složenom polju web programiranja, međuoprema i ispravne upotrebe kontekstualnih objekata kao što su HttpContext može učiniti naizgled težak zadatak kao što je dobijanje udaljene IP adrese prilično jednostavnim. Da bismo dohvatili IP adresu klijenta, moramo razumjeti zamršenosti HTTP protokola, ulogu međuvera kao što je 'ForwardedHeadersMiddleware' i korisnost HttpContext objekat.

Slični postovi:

Ostavite komentar