Skip to content

Instantly share code, notes, and snippets.

@MaximRouiller
Last active March 27, 2024 22:45
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save MaximRouiller/74ae40aa994579393f52747e78f26441 to your computer and use it in GitHub Desktop.
Save MaximRouiller/74ae40aa994579393f52747e78f26441 to your computer and use it in GitHub Desktop.
GitHub API access with Personal Access Token using C# HttpClient and .NET Core
public class Program
{
public static void Main(string[] args)
{
Task.WaitAll(ExecuteAsync());
Console.ReadLine();
}
public static async Task ExecuteAsync()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://api.github.com");
var token = "<token>";
client.DefaultRequestHeaders.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue("AppName", "1.0"));
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Token", token);
var response = await client.GetAsync("/user");
}
}
@MaximRouiller
Copy link
Author

This is the bare minimum to access the app. You could probably remove the "Accept" and rely on the default.

Authorization and User-Agent are required.

@darrelmiller
Copy link

Dude! User-Agent should always be added to, not overwritten.

client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("appName"));

@MaximRouiller
Copy link
Author

Okay, will modify tomorrow to do this right.

In this case, doesn't matter... But I agree with you

@MaximRouiller
Copy link
Author

@darrelmiller happy? 😄

@AnthonyDGreen
Copy link

Thanks! This helped me with a demo I was putting together!

@LawrenceMcKellar
Copy link

Thanks :-)

@stefanrothnet
Copy link

Awesome thanks, just needed this!

@Kriti021999
Copy link

How to get the content from the github api? I am not able to extract content that I can see when I use cli to invoke the api

@MaximRouiller
Copy link
Author

@Kriti021999 You will be able to get the content by adding the following after:

response.EnsureSuccessStatusCode();
string content = await response.Content.ReadAsStringAsync();
//todo: deserialize the JSON string in `content`

content will have the JSON representation of the URL above. You may need to create the objects yourself. The goal of this API is when you need to create single-api calls without importing all the libraries. If you are making lots of GitHub API calls, you should use the SDK. 😃

@umaimasohail-10P
Copy link

@MaximRouiller Hi. The code snippet is only working for public repos. Can you help me figure out how I can access private repos as well?

@cdiggins
Copy link

Really appreciated, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment