Exemplo n.º 1
0
        /// <summary>
        /// Posts the specified deployment asynchronously.
        /// </summary>
        /// <param name="deployment">The deployment.</param>
        /// <returns></returns>
        public async Task PostAsync(IDeployment deployment)
        {
            Assumption.AssertNotNull(this._config, nameof(this._config));
            Assumption.AssertNotNullOrWhiteSpace(this._config.AccessToken, nameof(this._config.AccessToken));
            Assumption.AssertFalse(string.IsNullOrWhiteSpace(deployment.Environment) && string.IsNullOrWhiteSpace(this._config.Environment), nameof(deployment.Environment));
            Assumption.AssertNotNullOrWhiteSpace(deployment.Revision, nameof(deployment.Revision));

            Assumption.AssertLessThan(
                deployment.Environment.Length, 256,
                nameof(deployment.Environment.Length)
                );
            Assumption.AssertTrue(
                deployment.LocalUsername == null || deployment.LocalUsername.Length < 256,
                nameof(deployment.LocalUsername)
                );
            Assumption.AssertTrue(
                deployment.Comment == null || StringUtility.CalculateExactEncodingBytes(deployment.Comment, Encoding.UTF8) <= (62 * 1024),
                nameof(deployment.Comment)
                );

            var uri = new Uri(this._config.EndPoint + RollbarDeployClient.deployApiPath);

            var parameters = new Dictionary <string, string> {
                { "access_token", this._config.AccessToken },
                { "environment", (!string.IsNullOrWhiteSpace(deployment.Environment)) ? deployment.Environment : this._config.Environment },
                { "revision", deployment.Revision },
                { "rollbar_username", deployment.RollbarUsername },
                { "local_username", deployment.LocalUsername },
                { "comment", deployment.Comment },
            };

            var httpContent = new FormUrlEncodedContent(parameters);

            var httpClient   = ProvideHttpClient();
            var postResponse = await httpClient.PostAsync(uri, httpContent);

            if (postResponse.IsSuccessStatusCode)
            {
                string reply = await postResponse.Content.ReadAsStringAsync();
            }
            else
            {
                postResponse.EnsureSuccessStatusCode();
            }

            this.Release(httpClient);

            return;
        }