我想计算我的ASP.NET Core Web应用程序中的总访问次数/访问者数。每当有新访问者访问我的网站时,数据库中的访客总值将增加一个。
对于传统的ASP.NET MVC应用程序,我们可以通过在 global.asax 文件中的 Session_Star()方法中使用Session变量来解决问题。
在ASP.NET Core MVC中这样做的最佳选择是什么?或者我如何在新访客访问我的网站时进行跟踪?
非常感谢任何合适的解决方案。谢谢!
答案 0 :(得分:3)
好!我已经使用ASP.NET核心中间件和会话解决了这个问题,如下所示:
以下是中间件组件:
public class VisitorCounterMiddleware
{
private readonly RequestDelegate _requestDelegate;
public VisitorCounterMiddleware(RequestDelegate requestDelegate)
{
_requestDelegate = requestDelegate;
}
public async Task Invoke(HttpContext context)
{
string visitorId = context.Request.Cookies["VisitorId"];
if (visitorId == null)
{
//don the necessary staffs here to save the count by one
context.Response.Cookies.Append("VisitorId", Guid.NewGuid().ToString(), new CookieOptions()
{
Path = "/",
HttpOnly = true,
Secure = false,
});
}
await _requestDelegate(context);
}
}
最后在Startup.cs文件中:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMiddleware(typeof(VisitorCounterMiddleware));
}
答案 1 :(得分:0)
这是我的解决方案(ASP.Net Core 2.2 MVC);
首先,您需要捕获访问者的远程IP。为此,请将以下代码放入启动配置服务方法中:
services.Configure<ForwardedHeadersOptions>(options => options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto);
然后在您的默认终点(我的住所/索引)中,使用以下方法获取访问者的ip:
string remoteIpAddress = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
if (Request.Headers.ContainsKey("X-Forwarded-For"))
{
remoteIpAddress = Request.Headers["X-Forwarded-For"];
}
获取远程IP后,如果是第一次访问,则可以将其保存到数据库中。您可以为此创建一个简单的模型,例如:
public class IPAdress:BaseModel
{
public string ClientIp { get; set; }
public int? CountOfVisit { get; set; }
}
如果这不是客户端的第一次访问,则只需增加CountOfVisit属性值即可。您必须在客户的首次请求下完成所有这些操作,直到您的默认端点。避免复制。
最后,您可以编写符合您需要的自定义方法。