public override async Task SignRequestAsync(ApiActionContext context) { await Task.CompletedTask; CCBSignSettings signSettings = context.ApiActionDescriptor.Arguments.FirstOrDefault(arg => arg is CCBSignSettings) as CCBSignSettings; IParameterNameComparer parameterNameComparer = context.ApiActionDescriptor.Arguments.FirstOrDefault(arg => arg is IParameterNameComparer) as IParameterNameComparer; string query = context.RequestMessage.RequestUri.Query; if (!string.IsNullOrWhiteSpace(query)) { IEnumerable <KeyValuePair <string, string> > kvs = query .Split('&') .Select(s => new KeyValuePair <string, string>(s.Split('=')[0], s.Split('=')[1])); SortedDictionary <string, string> sortedDictionary = new SortedDictionary <string, string>(parameterNameComparer); foreach (KeyValuePair <string, string> item in kvs) { SignOrderAttribute signOrderAttribute = parameterNameComparer?.GetSignOrderAttribute(item.Key); if (signOrderAttribute != null) { sortedDictionary.Add(item.Key, item.Value); } } CCBSignProvider ccbSignProvider = new CCBSignProvider(signSettings); string sign = ccbSignProvider.SignWithLast30BitsOfPublicKey(sortedDictionary); string signString = ccbSignProvider.SignString; Uri uri = new Uri(context.RequestMessage.RequestUri.AbsoluteUri + "&MAC=" + sign); context.RequestMessage.RequestUri = uri; } }
public int Compare(string x, string y) { SignOrderAttribute signOrderAttributeX = GetSignOrderAttribute(x); SignOrderAttribute signOrderAttributeY = GetSignOrderAttribute(y); if (signOrderAttributeY == null) { return(1); } if (signOrderAttributeX == null) { return(-1); } return(signOrderAttributeX.Order - signOrderAttributeY.Order); }