using Microsoft.AspNetCore.Http;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace WIDESEA_Core.Helper
|
{
|
public static class HttpContextHelper
|
{
|
/// <summary>
|
/// 获取客户端真实IP地址
|
/// </summary>
|
/// <param name="context">Http上下文对象</param>
|
/// <returns>客户端IP地址字符串</returns>
|
/// <remarks>
|
/// 优先从X-Real-IP和X-Forwarded-For请求头中获取IP地址,
|
/// 如果不存在则返回连接远程IP地址
|
/// </remarks>
|
public static string GetUserIp(this HttpContext context)
|
{
|
string realIP = null;
|
string forwarded = null;
|
string remoteIpAddress = context.Connection.RemoteIpAddress.ToString();
|
if (context.Request.Headers.ContainsKey("X-Real-IP"))
|
{
|
realIP = context.Request.Headers["X-Real-IP"].ToString();
|
if (realIP != remoteIpAddress)
|
{
|
remoteIpAddress = realIP;
|
}
|
}
|
if (context.Request.Headers.ContainsKey("X-Forwarded-For"))
|
{
|
forwarded = context.Request.Headers["X-Forwarded-For"].ToString();
|
if (forwarded != remoteIpAddress)
|
{
|
remoteIpAddress = forwarded;
|
}
|
}
|
return remoteIpAddress;
|
}
|
}
|
}
|