https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.0&viewFallbackFrom=aspnetcore-1.1#forwarded-headers-middleware-options 这是用于实现的文章
示例代码
1)使用转发选项配置服务
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.Configure<AppSettings>(Configuration);
services.AddMvc();
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.ForwardLimit = 2;
options.KnownProxies.Add(System.Net.IPAddress.Parse("123.111.11.88"));
//options.KnownProxies.Clear();
//options.KnownNetworks.Clear();
});
}2)配置方法变更如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
--------
app.UseForwardedHeaders();
-------
}3)读取headers的代码如下:
string realClientIP = GetHeaderValueAs<string>("X-Cluster-Client-Ip");
public T GetHeaderValueAs<T>(string headerName)
{
StringValues values;
Request.Headers.TryGetValue(headerName, out values);
if (!StringValues.IsNullOrEmpty(values))
{
var rawValues = values.ToString();
if (!string.IsNullOrEmpty(rawValues))
return (T)Convert.ChangeType(values.ToString(), typeof(T));
}
return default(T);
}查询:
1)这是获得. net core 1.1真实客户端IP的正确方法吗?因为我可以看到MSDN文章是针对. net core 3.0的,而没有关于core 1.0的参考文章。
2)是否可以使用自定义头部获取结果?如果可能,如何获取结果?
3)有没有其他办法请告诉我?
发布于 2021-03-24 00:55:02
步骤1。将代码更改为
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownProxies.Clear();
options.KnownNetworks.Clear();
});步骤2。添加ContextAccessor
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();步骤3。使用IActionContextAccessor获取IP,如下所示
public static string GetClientIp(this IActionContextAccessor contextAccessor)
{
var remoteIp = contextAccessor.ActionContext.HttpContext.Connection.RemoteIpAddress;
if (remoteIp.IsIPv4MappedToIPv6)
{
remoteIp = remoteIp.MapToIPv4();
}
return remoteIp.ToString();
}https://stackoverflow.com/questions/58541799
复制相似问题