30 lines
1.2 KiB
C#
30 lines
1.2 KiB
C#
|
||
namespace Yes.Domain.Core.Extensions
|
||
{
|
||
public static class HttpContextExtensions
|
||
{
|
||
public static string GetIpAddress(this HttpContext httpContext)
|
||
{
|
||
var ipAddress = httpContext.Connection.RemoteIpAddress?.ToString();
|
||
// 如果使用了代理服务器,可能需要从X-Forwarded-For头获取真实的IP地址
|
||
if (ipAddress == null || ipAddress == "::1") // "::1" 是IPv6的localhost
|
||
{
|
||
var xForwardedForHeader = httpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
|
||
if (!string.IsNullOrEmpty(xForwardedForHeader))
|
||
{
|
||
ipAddress = xForwardedForHeader.Split(",").FirstOrDefault()?.Trim() ?? "";
|
||
}
|
||
}
|
||
return ipAddress ?? "";
|
||
}
|
||
|
||
public static string GetCurrentDomain(this HttpContext httpContext)
|
||
{
|
||
var request = httpContext.Request;
|
||
var host = request.Headers["X-Forwarded-Host"].FirstOrDefault() ?? request.Host.Host;
|
||
var protocol = request.Headers["X-Forwarded-Proto"].FirstOrDefault() ?? request.Scheme;
|
||
return $"{protocol}://{host}";
|
||
}
|
||
}
|
||
}
|