private async Task <CommitStatusResponse> PostMessage(CommitStatus status, CancellationToken token = default(CancellationToken)) { var data = status.ToJson(); var buffer = Encoding.UTF8.GetBytes(data); //var url = NetPath.Combine(StatusUrl, Sha); var url = StatusUrl.Replace("{sha}", Sha); var request = WebRequest.CreateHttp(url); request.Method = "POST"; request.KeepAlive = false; request.ContentType = "application/json"; request.ContentLength = buffer.Length; request.UserAgent = "Photon.Server"; var hasUsername = !string.IsNullOrEmpty(Username); var hasPassword = !string.IsNullOrEmpty(Password); if (hasUsername || hasPassword) { var encoding = Encoding.GetEncoding("ISO-8859-1"); var authBuffer = encoding.GetBytes($"{Username}:{Password}"); var authString = Convert.ToBase64String(authBuffer); request.Headers.Add("Authorization", $"Basic {authString}"); } using (token.Register(() => request.Abort())) { using (var requestStream = request.GetRequestStream()) { await requestStream.WriteAsync(buffer, 0, buffer.Length, token); } using (var response = (HttpWebResponse)await request.GetResponseAsync()) using (var responseStream = response.GetResponseStream()) { if (responseStream == null) { return(null); } using (var reader = new StreamReader(responseStream)) using (var jsonReader = new JsonTextReader(reader)) { return(JsonSettings.Serializer.Deserialize <CommitStatusResponse>(jsonReader)); } } } }