/// <summary> /// Merges the explicitly provided values with the extra object /// </summary> /// <param name="explicitValues">The explicit values.</param> /// <param name="extra">The extra.</param> /// <returns></returns> public Dictionary <string, string> Merge(Dictionary <string, string> explicitValues, object extra = null) { var merged = explicitValues; if (AuthenticationStyle == AuthenticationStyle.PostValues) { merged.Add(OidcConstants.TokenRequest.ClientId, ClientId); if (ClientSecret.IsPresent()) { merged.Add(OidcConstants.TokenRequest.ClientSecret, ClientSecret); } } var additionalValues = ValuesHelper.ObjectToDictionary(extra); if (additionalValues != null) { merged = explicitValues.Concat(additionalValues.Where(add => !explicitValues.ContainsKey(add.Key))) .ToDictionary(final => final.Key, final => final.Value); } return(merged); }