public async Task <MembershipContext> GetMembershipContext() { if (_httpContext.Items.Contains(Key)) { return(_httpContext.Items[Key] as MembershipContext); } _logger.Debug("Membership not found in http context. Generating new membership context."); if (!_authenticationService.IsUserAuthenticated()) { _logger.Info("Unable to find memebership due to user is not authenticated"); return(null); } _logger.Debug("Getting membership external id claim."); string userExternalId; if (!_authenticationService.TryGetClaimValue(Constants.UserExternalIdClaimKeyName, out userExternalId)) { _logger.Info("Unable to find memebership due to external id not found"); return(null); } _logger.Debug("Now getting the hashed account id from the route."); object accountHashedId; if (!_httpContext.Request.RequestContext.RouteData.Values.TryGetValue(Constants.AccountHashedIdRouteKeyName, out accountHashedId)) { _logger.Info($"Unable to find memebership due to {nameof(Constants.AccountHashedIdRouteKeyName)} not found in RouteData"); return(null); } _logger.Debug($"Got the hashed account id: {accountHashedId}, now getting the memberships for the account."); var memberships = (await _membershipProvider.GetMemberships(accountHashedId.ToString()).ConfigureAwait(false)).ToList(); _logger.Debug("Got the account memberships"); var membership = memberships.FirstOrDefault(m => m.UserRef.Equals(userExternalId, StringComparison.OrdinalIgnoreCase)); if (membership == null) { _logger.Info($"Unable to find membership due to {userExternalId} is missing from memberships, Total {memberships.Count} memberships found"); return(null); } _logger.Info($"User {userExternalId} is a member of {membership.HashedAccountId}."); _httpContext.Items[Key] = membership; return(membership); }