Ara

Asp.Net Core 7.0 İle Kullanıcının Ip Adresini Almanın Yolu

C# ile bir web sitesine giriş yapan kullanıcının IP adresini almak için aşağıdaki kodu kullanabilirsiniz. Bu örnek, bir ASP.NET Core uygulaması için kullanıcının IP adresini nasıl alacağınızı gösterir.

IP adresini saklamak için MSSQL'de kullanabileceğiniz birkaç farklı veri türü vardır. IPv4 ve IPv6 adresleri için farklı yaklaşımlar gerekebilir. Genellikle en yaygın yaklaşım, IP adreslerini VARCHAR ya da NVARCHAR olarak saklamaktır. Bununla birlikte, IP adresinin kaç haneli olduğu ve hangi tür IP adreslerini (IPv4 veya IPv6) desteklemek istediğiniz de önemlidir.

 

IPv4 Adresleri

Bir IPv4 adresi noktalı ondalık biçiminde dört sayıdan oluşur, örneğin 192.168.1.1. Bu tür bir IP adresi en fazla 15 karakter uzunluğundadır.

IPv6 Adresleri

Bir IPv6 adresi ise daha uzun olabilir ve sekiz grup dört heksadesimal rakamdan oluşur, örneğin 2001:0db8:85a3:0000:0000:8a2e:0370:7334. Bu tür bir IP adresi en fazla 45 karakter uzunluğundadır.

Hem IPv4 Hem de IPv6 Adreslerini Desteklemek

Eğer hem IPv4 hem de IPv6 adreslerini desteklemek istiyorsanız, en geniş veri tipini seçmeniz mantıklı olacaktır, yani VARCHAR(45).

 

Örnek Kullanım

Örnek bir tablo oluşturma ve veri ekleme işlemi aşağıdaki gibi olabilir:

-- Tabloyu oluştur
CREATE TABLE Users (
    UserID INT PRIMARY KEY,
    UserName NVARCHAR(50),
    UserIpAddress VARCHAR(45)
);

-- Veri ekle
INSERT INTO Users (UserID, UserName, UserIpAddress) VALUES (1, 'JohnDoe', '192.168.1.1');
INSERT INTO Users (UserID, UserName, UserIpAddress) VALUES (2, 'JaneDoe', '2001:0db8:85a3:0000:0000:8a2e:0370:7334');

 

1. IP Adresi Alma Servisi

using Microsoft.AspNetCore.Http;
using System.Linq;

namespace YourNamespace.Services
{
    public class IpAddressService
    {
        private readonly IHttpContextAccessor _httpContextAccessor;

        public IpAddressService(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public string GetUserIpAddress()
        {
            var context = _httpContextAccessor.HttpContext;

            string ipAddress = context?.Connection.RemoteIpAddress?.ToString();

            if (string.IsNullOrEmpty(ipAddress))
            {
                ipAddress = context?.Request.Headers["X-Forwarded-For"].FirstOrDefault();
            }

            if (string.IsNullOrEmpty(ipAddress))
            {
                ipAddress = context?.Request.Headers["X-Real-IP"].FirstOrDefault();
            }

            return ipAddress ?? "IP address not found";
        }
    }
}

 

2. Servisi Bağımlılık Olarak Eklemek

Program.cs:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

// Add IHttpContextAccessor
builder.Services.AddHttpContextAccessor();

// Add IpAddressService
builder.Services.AddTransient();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

 

3. Controller İçerisinde Servisi Kullanmak

Controllers/HomeController.cs

using Microsoft.AspNetCore.Mvc;
using YourNamespace.Services;

namespace YourNamespace.Controllers
{
    public class HomeController : Controller
    {
        private readonly IpAddressService _ipAddressService;

        public HomeController(IpAddressService ipAddressService)
        {
            _ipAddressService = ipAddressService;
        }

        public IActionResult Index()
        {
            string userIpAddress = _ipAddressService.GetUserIpAddress();
            ViewBag.UserIpAddress = userIpAddress;
            return View();
        }
    }
}

 

4. View Kodu

Views/Home/Index.cshtml

@{
    ViewBag.Title = "Home Page";
}

<h2>Welcome to the Home Page</h2>
<p>Your IP Address is: @ViewBag.UserIpAddress</p>

 

IpAddressService Sınıfı: IpAddressService sınıfını oluşturduk ve GetUserIpAddress metodunu bu sınıfa ekledik. IHttpContextAccessor kullanarak HTTP bağlamına erişiyoruz. Bu, servislerin HTTP bağlamına erişmesini sağlar.

Program.cs: IHttpContextAccessor ve IpAddressService'i servis olarak ekledik. Bu, dependency injection (bağımlılık enjeksiyonu) ile kullanılabilir hale getirir.

HomeController: IpAddressService'i dependency injection yoluyla aldık ve Index metodunda kullandık.

Author

Bilgisayar programcılığı bölümü mezunuyum. Web ve masaüstü uygulama geliştiricisiyim. C#,.Asp.Net Core, JQuery, Ajax, Entity Framework konularında bilgi sahibiyim. Bu sitenin kurucusuyum . Aynı zamanda şiir yazmayı seven birisiyim. 2023 yılında "Gökkuşağının Koyu Tonu" adlı ilk şiir kitabım yayınlandı. Yazmaya devam ediyorum.
Yorum Yap
Yorumlar (0)