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.
Yorum Yap