public Uri Sign(SignatureRequest arg) { if (arg == null) { throw new ArgumentNullException(nameof(arg)); } if (!arg.Algorithm.Equals(AlgorithmName, StringComparison.OrdinalIgnoreCase)) { throw new ArgumentException($"Algorithm \"{arg.Algorithm}\" is not supported", nameof(arg)); } var urlBuilder = new UrlBuilder(); urlBuilder.AddAbsoluteUri(arg.Url.AbsoluteUri); urlBuilder.AddQueryParam(SignatureRequest.AlgorithmKey, canonicalStringBuider.BuildAlgorithm(arg)); urlBuilder.AddQueryParam(SignatureRequest.CredentialKey, canonicalStringBuider.BuildCredentials(arg)); urlBuilder.AddQueryParam(SignatureRequest.DateKey, canonicalStringBuider.BuildTimestamp(arg)); urlBuilder.AddQueryParam(SignatureRequest.SignedHeadersKey, canonicalStringBuider.BuildSignedHeaders(arg)); var stringToSign = BuildStringToSign(arg); var signature = hashCalculator.GetStringToSignHash( stringToSign, arg.Secret); urlBuilder.AddQueryParam(SignatureRequest.SignatureKey, signature); return(urlBuilder.ToUri(true)); }
public void AddQueryParam_Should_Appedn_Parameters_Without_UrlEncoding(string url, string queryParam, string value, string expectedResult) { underTest.AddAbsoluteUri(url); underTest.AddQueryParam(queryParam, value); underTest.ToUri().ToString().Should().Be(expectedResult); }