public override void PreSign()

in sdk/Util/OssRequestSignerV4.cs [83:135]


        public override void PreSign(ServiceRequest request, SigningContext signingContext)
        {
            if (signingContext == null || 
                signingContext.Expiration == null ||
                IsAnonymousCredentials(signingContext.Credentials))
                return;

            // Date
            var signTime = DateTime.UtcNow;
            if (signingContext.SignTime.Ticks != 0)
            {
                signTime = signingContext.SignTime;
            }
            var datetime = FormatDateTime(signTime);
            var date = FormatDate(signTime);
            var expires = ((long)signingContext.Expiration.Subtract(signTime).TotalSeconds).ToString(CultureInfo.InvariantCulture);

            // Scope
            var scope = string.Format("{0}/{1}/{2}/aliyun_v4_request", date, Region, Product);

            var additionalHeaders = GetAdditionalHeaders(request.Headers, AdditionalHeaders);

            // Credentials information
            var credentials = signingContext.Credentials;
            if (credentials.UseToken)
            {
                request.Parameters.Add("x-oss-security-token", credentials.SecurityToken);
            }
            request.Parameters.Add("x-oss-signature-version", "OSS4-HMAC-SHA256");
            request.Parameters.Add("x-oss-date", datetime);
            request.Parameters.Add("x-oss-expires", expires);
            request.Parameters.Add("x-oss-credential", string.Format("{0}/{1}", credentials.AccessKeyId, scope));
            if (additionalHeaders != null && additionalHeaders.Count > 0)
            {
                request.Parameters.Add("x-oss-additional-headers", CanonicalizeHeaderNames(additionalHeaders));
            }

            // CanonicalRequest
            var canonicalRequest = CanonicalizeRequest(request, additionalHeaders);

            // StringToSign
            var stringToSign = CalcStringToSign(datetime, scope, canonicalRequest);

            // Signature
            var signature = CalcSignature(credentials.AccessKeySecret, date, Region, Product, stringToSign);

            // Credential
            request.Parameters.Add("x-oss-signature", signature);

            //Console.WriteLine("canonicalRequest:{0}\n", canonicalRequest);
            //Console.WriteLine("stringToSign:{0}\n", stringToSign);
            //Console.WriteLine("signature:{0}\n", signature);
        }