public async Task CountRedirect(ShortLinkModel shortLink, bool disableTracking) { var addr = HttpContext.Connection.RemoteIpAddress; bool isUnique = true; if (IPCache.Contains(addr)) { var guid = IPCache.Get(addr); isUnique = !guid.HasValue || guid.Value != shortLink.GUID; } //Db.ShortLinks.Update(shortLink); var ipInfoToken = Configuration.GetSection("secrets")?.GetValue <string>("ipinfotoken"); var ipInfo = new IPInfoModel(); if (!ipInfoToken.IsEmpty()) { try { ipInfo = await IPInfo.GetInfo(addr, ipInfoToken); } catch (Exception e) { Logger.LogError("Failed getting IPInfo: ", e); } } else { Logger.LogWarning("IPInfo could not be collected because no IPInfo API token was provided"); } var access = new AccessModel() { ShortLinkGUID = shortLink.GUID, IsUnique = isUnique, Timestamp = DateTime.Now, }; if (!disableTracking) { access.ShortLinkGUID = shortLink.GUID; access.City = ipInfo.City; access.Country = ipInfo.Country; access.IsUnique = isUnique; access.Org = ipInfo.Org; access.Postal = ipInfo.Postal; access.Region = ipInfo.Region; access.Timestamp = DateTime.Now; access.Timezone = ipInfo.Timezone; access.UserAgent = HttpContext.Request.Headers["User-Agent"].ToString(); } DbCache.AddAccess(access); if (isUnique) { IPCache.Push(addr, shortLink.GUID); } //await Db.SaveChangesAsync(); }