访客IP地址未显示

问题描述

获取访问者IP地址时遇到问题 我正在使用ASP Net MVC 不幸的是,我使用以下代码保存了访问者的IP地址bur,但它无法在我的本地网络上正常工作,很多人从LAN访问了我的页面,但没有捕获到其中的任何一个我有一个很多页面的网站,如果用户访问了另一个页面,问题根本无法解决,因为我在Home索引中有代码 请让我知道我的代码有什么问题,以及我必须将代码放置在项目中的位置,以便如果用户单击链接而不是首页,它将捕获并吸引任何页面的访问者 这是我的代码 家用控制器

public ActionResult Index()
        {
            string currip = string.Empty;
            if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                currip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
            }
            else if (System.Web.HttpContext.Current.Request.UserHostAddress.Length != 0)
            {
                currip = System.Web.HttpContext.Current.Request.UserHostAddress;

            }
         //   string currip = HttpContext.Request.UserHostAddress.ToString(); // tried this didnt work it gave me single ip for all visitors 
             //   vs.Ip = currip;
                vs.Ip = HttpContext.Request.UserHostAddress.ToString();
                vs.lastaccess = DateTime.Now;
                vs.visits += 1;
                _db.SaveChanges();           
           
           return view();
}

更新 使用时 currip = System.Web.HttpContext.Current.Request.UserHostAddress; 用于添加登录信息ip的发布方法,但由于它是get方法而未显示用于访问的信息 有什么关系吗?

解决方法

public static string getIPAddress(HttpRequestBase request)
    {
        string ipAddress = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(ipAddress))
        {
            ipAddress = request.ServerVariables["REMOTE_ADDR"];
        }

        return ipAddress;
    }

更新

您可以使用访问属性

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class VisitAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var descriptor = filterContext.ActionDescriptor;
        var controller = descriptor.ControllerDescriptor.ControllerName;
        var action = descriptor.ActionName;
        var user = filterContext.HttpContext.User.Identity.Name;

        // your code here 
     }
}

然后,您可以像这样通过控制器或操作调用

[Visit]
public class YourController : Controller
{

}
,

我尝试过但没有成功的Wowo Ot答案的补充,从逻辑上讲答案是正确的,但是我的代码存在问题 旧代码

vs.visits += 1;
_db.SaveChanges();   

我必须编辑我的代码

vs.visits += 1;
_db.visit.add(vs); // here was the missing code 
_db.SaveChanges();