/// <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; }