using System.Net.Http.Headers;
using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
private static string token;
private static string refreshToken;
private static HttpResponseMessage RefreshToken(HttpClient httpClient) {
private static HttpResponseMessage RequestWrapper(HttpMethod httpMethod, string apiUrl, Func<HttpClient, HttpRequestMessage, HttpResponseMessage> apiRequest) {
using (var httpClient = new HttpClient()) {
using (var request = new HttpRequestMessage(httpMethod, apiUrl)) {
var response = apiRequest(httpClient, request);
if (response.StatusCode == HttpStatusCode.Unauthorized) {
var refreshResponse = RefreshToken(httpClient);
if (refreshResponse.StatusCode == HttpStatusCode.BadRequest)
return apiRequest(httpClient, request);
public void CreateBranch(string branchName) {
RequestWrapper(new HttpMethod("POST"), "https://bitbucket.org/site/oauth2/access_token", delegate (HttpClient httpClient, HttpRequestMessage request) {
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("client_id:secret"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
var contentList = new List<string>();
contentList.Add("grant_type=refresh_token");
contentList.Add("refresh_token={refresh_token}");
request.Content = new StringContent(string.Join("&", contentList));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
return httpClient.Send(request);
public bool DeleteBranch(string branchName) {
return RequestWrapper(new HttpMethod("POST"), "https://bitbucket.org/site/oauth2/access_token", delegate (HttpClient httpClient, HttpRequestMessage request) {
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("client_id:secret"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
var contentList = new List<string>();
contentList.Add("grant_type=refresh_token");
contentList.Add("refresh_token={refresh_token}");
request.Content = new StringContent(string.Join("&", contentList));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
return httpClient.Send(request);
}).StatusCode == HttpStatusCode.OK;