问题描述
获取访问者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();