Microsoft .NET/ASP.Net & ASP.Net Core
[ASP.Net Core] 접속자 IP 받기
전자기린
2021. 7. 16. 14:35
"Startup.cs" 클래스의 "ConfigureServices 함수"에 아래 코드 추가
public void ConfigureServices(IServiceCollection services)
{
#region IP
services.AddSingleton<Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor>();
#endregion
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
IP를 받을 Controller에 아래 코드를 추가하고 생성자 명을 본인 코드에 맞게 변경합니다.
/// <summary>
/// 생성자
/// </summary>
/// <param name="_acc"></param>
public UserController(Microsoft.AspNetCore.Http.IHttpContextAccessor _acc)
{
HttpContextAccessor = _acc;
}
#region IP
private Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor;
/// <summary>
/// 접속자 IP 주소
/// </summary>
public string IP
{
get
{
var result = string.Empty;
//헤더에서 IP 주소 가져오기
if (HttpContextAccessor.HttpContext.Request.Headers != null)
{
//XFF(X-Forwarded-For) HTTP 헤더 필드는 클라이언트의 원래 IP 주소를 식별하기 위한 표준
//HTTP 프록시 또는 로드 밸런서를 통해 웹 서버에 연결
var forwardedHeader = HttpContextAccessor.HttpContext.Request.Headers["X-Forwarded-For"];
if (!Microsoft.Extensions.Primitives.StringValues.IsNullOrEmpty(forwardedHeader))
result = forwardedHeader.FirstOrDefault();
}
//헤더가 없는 경우 연결 원격 IP 주소를 가져오기
if (string.IsNullOrEmpty(result) && HttpContextAccessor.HttpContext.Connection.RemoteIpAddress != null)
result = HttpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();
return result.Replace("::1", "192.168.0.1").Replace("::ffff:", "");
}
}
#endregion