【问题标题】:Total hit/visitor counter in ASP.NET Core MVC ApplicationASP.NET Core MVC 应用程序中的总命中/访问者计数器
【发布时间】:2018-04-12 14:16:10
【问题描述】:

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

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

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

我们将不胜感激任何适当的解决方案。谢谢!

【问题讨论】:

  • 这是total current live sessions 还是total sessions ever to hit the site?例如,如果当前的实时会话总数,我确定您可以从 Google Analytics 获得这个值?
  • 目前我需要总会话数才能访问该站点。但是,如果我同时获得当前的实时会话总数和访问网站的总会话数,这将很有用。
  • 好的,所以 GA 应该允许您通过他们的 API 提取“实时用户”计数。您也可以从 GA 获得所有时间的总会话数。
  • 我会将总访问者数量存储到数据库中。所以有没有办法跟踪新用户何时访问我的网站?
  • @thmsh,是的!你是对的..我已经这样做了,我很快就会把它作为这个问题的答案发布..谢谢你的建议

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


【解决方案1】:

好的!我已经使用 ASP.NET Core 中间件和会话解决了这个问题,如下所示:

这是中间件组件:

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));
}

【讨论】:

  • 如何在控制器中使用这个类?
  • @saeed,告诉你到底需要什么?
  • 我想在 asp.net core 2 中获得总唯一身份访问者。我创建了 VisitorCounterMiddleware 类并在 startup.cs 中添加 middleware 类似于答案。现在我该如何使用这个类? RequestDelegate 参数是什么?
  • @saeed 如果您的操作与答案中的完全相同,那么您就不需要再做任何事情了。现在在VisitorCounterMiddleware 类上设置一个断点并在调试模式下运行应用程序,看看发生了什么!
  • 请帮助我如何使用它。
【解决方案2】:

这是我的解决方案(ASP.Net Core 2.2 MVC);

首先你需要捕获访问者的远程 ip。为此,请将此代码放入您的启动配置服务方法中:

    services.Configure<ForwardedHeadersOptions>(options => options.ForwardedHeaders = 
    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto);

然后在您的默认端点(我的是 home/index)中,使用以下命令获取访问者的 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 属性值。您必须在客户第一次请求您的默认端点时执行所有这些操作。避免重复。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多