gpt4 book ai didi

c# - 为什么在 WebAPI 自定义操作过滤器中获取 Request.UserHostAddress 时总是获取相同的 IP?

转载 作者:太空狗 更新时间:2023-10-29 22:59:07 29 4
gpt4 key购买 nike

我创建了一个 Web API 自定义操作过滤器来记录来电。我正在尝试获取调用者的 IP 地址,我发现的所有内容都表明要使用 Request.UserHostAddress。问题是不管从哪里来的电话,IP都是一样的。

这是我的操作过滤器的代码:

public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var name = actionContext.ActionDescriptor.ActionName;

// Get the sender address
var caller = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress;

// Log the call
SystemBL.InsertSiteLog("WebAPI:" + name, "From:" + caller);
}
}

我也尝试过:

var caller = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.ServerVariables["REMOTE_ADDR"].ToString();

但结果是一样的。有什么想法吗?

最佳答案

在这里找到答案:HttpContext.Current.Request.UserHostAddress is null .

基本上,我需要整理转发。最终代码为:

    public override void OnActionExecuting(HttpActionContext actionContext)
{
var name = actionContext.ActionDescriptor.ActionName;

// Get the sender address
var myRequest = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request;
var ip = myRequest.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ip))
{
string[] ipRange = ip.Split(',');
int le = ipRange.Length - 1;
string trueIP = ipRange[le];
}
else
{
ip = myRequest.ServerVariables["REMOTE_ADDR"];
}

// Log the call
SystemBL.InsertSiteLog("WebAPI:" + name, "From:" + ip);
}

谢谢大家。我会在 2 天内将其标记为答案。

关于c# - 为什么在 WebAPI 自定义操作过滤器中获取 Request.UserHostAddress 时总是获取相同的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796472/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com