ASP.NET Core MVC应用程序中的总命中/访问者计数器

时间:2018-04-12 14:16:10

标签: asp.net-mvc asp.net-core asp.net-core-mvc asp.net-core-2.0

我想计算我的ASP.NET Core Web应用程序中的总访问次数/访问者数。每当有新访问者访问我的网站时,数据库中的访客总值将增加一个。

对于传统的ASP.NET MVC应用程序,我们可以通过在 global.asax 文件中的 Session_Star()方法中使用Session变量来解决问题。

在ASP.NET Core MVC中这样做的最佳选择是什么?或者我如何在新访客访问我的网站时进行跟踪?

非常感谢任何合适的解决方案。谢谢!

2 个答案:

答案 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属性值即可。您必须在客户的首次请求下完成所有这些操作,直到您的默认端点。避免复制。

最后,您可以编写符合您需要的自定义方法。