-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
478 additions
and
119 deletions.
There are no files selected for viewing
93 changes: 46 additions & 47 deletions
93
Src/GitHubApiStatus.Extensions/GitHubApiStatus.Extensions.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,60 +1,59 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<PropertyGroup> | ||
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0</TargetFrameworks> | ||
<SignAssembly>true</SignAssembly> | ||
<AssemblyOriginatorKeyFile>GitHubApiStatus.Extensions.snk</AssemblyOriginatorKeyFile> | ||
<AssemblyName>GitHubApiStatus.Extensions</AssemblyName> | ||
<RootNamespace>GitHubApiStatus.Extensions</RootNamespace> | ||
<PackageId>GitHubApiStatus.Extensions</PackageId> | ||
<PublishRepositoryUrl>true</PublishRepositoryUrl> | ||
<EmbedUntrackedSources>true</EmbedUntrackedSources> | ||
<IncludeSymbols>true</IncludeSymbols> | ||
<SymbolPackageFormat>snupkg</SymbolPackageFormat> | ||
<Summary> | ||
<PropertyGroup> | ||
<TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.0;net5.0;net6.0</TargetFrameworks> | ||
<SignAssembly>true</SignAssembly> | ||
<AssemblyOriginatorKeyFile>GitHubApiStatus.Extensions.snk</AssemblyOriginatorKeyFile> | ||
<AssemblyName>GitHubApiStatus.Extensions</AssemblyName> | ||
<RootNamespace>GitHubApiStatus.Extensions</RootNamespace> | ||
<PackageId>GitHubApiStatus.Extensions</PackageId> | ||
<PublishRepositoryUrl>true</PublishRepositoryUrl> | ||
<EmbedUntrackedSources>true</EmbedUntrackedSources> | ||
<IncludeSymbols>true</IncludeSymbols> | ||
<SymbolPackageFormat>snupkg</SymbolPackageFormat> | ||
<Summary> | ||
Extentions for GitHub API Rate Limit Status | ||
- Implements Microsoft.Extensions.DependencyInjection | ||
- Implements Microsoft.Extensions.Http | ||
</Summary> | ||
<PackageTags>github, git, api, rate, rate limit</PackageTags> | ||
<Title>Extensions for GitHub API Rate Limit Status</Title> | ||
<Description> | ||
<PackageTags>github, git, api, rate, rate limit</PackageTags> | ||
<Title>Extensions for GitHub API Rate Limit Status</Title> | ||
<Description> | ||
Extentions for GitHub API Rate Limit Status | ||
- Implements Microsoft.Extensions.DependencyInjection | ||
- Implements Microsoft.Extensions.Http | ||
</Description> | ||
<PackageReleaseNotes> | ||
<PackageReleaseNotes> | ||
New In This Release: | ||
- Add Support for Microsoft.Extensions.DependencyInjection | ||
- Implements Microsoft.Extensions.Http | ||
- Add .NET 6 Support | ||
</PackageReleaseNotes> | ||
<Version>2.0.2</Version> | ||
<RepositoryUrl>https://github.com/brminnick/GitHubApiStatus</RepositoryUrl> | ||
<Product>$(AssemblyName) ($(TargetFramework))</Product> | ||
<AssemblyVersion>1.0.0.0</AssemblyVersion> | ||
<AssemblyFileVersion>1.0.0.0</AssemblyFileVersion> | ||
<PackageVersion>$(Version)$(VersionSuffix)</PackageVersion> | ||
<Authors>Brandon Minnick</Authors> | ||
<Owners>Brandon Minnick</Owners> | ||
<NeutralLanguage>en</NeutralLanguage> | ||
<Copyright>©Copyright 2020 Brandon Minnick. All rights reserved.</Copyright> | ||
<requireLicenseAcceptance>false</requireLicenseAcceptance> | ||
<DefineConstants>$(DefineConstants);</DefineConstants> | ||
<UseFullSemVerForNuGet>false</UseFullSemVerForNuGet> | ||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems> | ||
<PackageLicenseExpression>MIT</PackageLicenseExpression> | ||
<PackageProjectUrl>https://github.com/brminnick/GitHubApiStatus</PackageProjectUrl> | ||
<DebugType>portable</DebugType> | ||
<Configurations>Release;Debug</Configurations> | ||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Compile Include="GitHubApiStatusServiceExtensions.cs" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<ProjectReference Include="..\GitHubApiStatus\GitHubApiStatus.csproj" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Extensions.Http" Version="2.1.0" /> | ||
</ItemGroup> | ||
<Version>2.0.2</Version> | ||
<RepositoryUrl>https://github.com/brminnick/GitHubApiStatus</RepositoryUrl> | ||
<Product>$(AssemblyName) ($(TargetFramework))</Product> | ||
<AssemblyVersion>1.0.0.0</AssemblyVersion> | ||
<AssemblyFileVersion>1.0.0.0</AssemblyFileVersion> | ||
<PackageVersion>$(Version)$(VersionSuffix)</PackageVersion> | ||
<Authors>Brandon Minnick</Authors> | ||
<Owners>Brandon Minnick</Owners> | ||
<NeutralLanguage>en</NeutralLanguage> | ||
<Copyright>©Copyright 2020 Brandon Minnick. All rights reserved.</Copyright> | ||
<requireLicenseAcceptance>false</requireLicenseAcceptance> | ||
<DefineConstants>$(DefineConstants);</DefineConstants> | ||
<UseFullSemVerForNuGet>false</UseFullSemVerForNuGet> | ||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems> | ||
<PackageLicenseExpression>MIT</PackageLicenseExpression> | ||
<PackageProjectUrl>https://github.com/brminnick/GitHubApiStatus</PackageProjectUrl> | ||
<DebugType>portable</DebugType> | ||
<Configurations>Release;Debug</Configurations> | ||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Compile Include="GitHubApiStatusServiceExtensions.cs" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<ProjectReference Include="..\GitHubApiStatus\GitHubApiStatus.csproj" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Extensions.Http" Version="2.1.0" /> | ||
</ItemGroup> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
# GitHubApiStatus.Extensions | ||
|
||
[![NuGet](https://buildstats.info/nuget/GitHubApiStatus.Extensions?includePreReleases=true)](https://www.nuget.org/packages/GitHubApiStatus.Extensions/) | ||
|
||
- Available on NuGet: https://www.nuget.org/packages/GitHubApiStatus.Extensions/ | ||
- Add to any project supporting .NET Standard 2.0 | ||
- Leverages [Microsoft.Extensions.Http](https://www.nuget.org/packages/Microsoft.Extensions.Http/) | ||
|
||
## API | ||
|
||
### AddGitHubApiStatusService | ||
|
||
```csharp | ||
public static IHttpClientBuilder AddGitHubApiStatusService(this IServiceCollection services, AuthenticationHeaderValue authenticationHeaderValue, ProductHeaderValue productHeaderValue) | ||
``` | ||
- Adds GitHubApiStatus.GitHubApiStatusService to `Microsoft.Extensions.DependencyInjection.IServiceCollection` | ||
|
||
### AddGitHubApiStatusService<TGitHubApiStatusService> | ||
|
||
```csharp | ||
public static IHttpClientBuilder AddGitHubApiStatusService<TGitHubApiStatusService>(this IServiceCollection services, AuthenticationHeaderValue authenticationHeaderValue, ProductHeaderValue productHeaderValue) where TGitHubApiStatusService : IGitHubApiStatusService | ||
``` | ||
- Adds a custom implementation of IGitHubApiStatusService to `Microsoft.Extensions.DependencyInjection.IServiceCollection` | ||
|
||
## Dependency Injection | ||
|
||
- [Jump to Blazor Example](#blazor-example) | ||
- [Jump to ASP.NET Core Example](#aspnet-core-example) | ||
- [Jump to Azure Functions Example](#azure-functions-example) | ||
|
||
### Blazor Example | ||
|
||
```csharp | ||
public class Program | ||
{ | ||
public static Task Main(string[] args) | ||
{ | ||
var builder = WebAssemblyHostBuilder.CreateDefault(args); | ||
builder.RootComponents.Add<App>("#app"); | ||
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); | ||
|
||
// AddGitHubApiStatusService | ||
builder.Services.AddGitHubApiStatusService(new AuthenticationHeaderValue("bearer", "[Your GitHub Personal Access Token, e.g. 123456789012345]"), new ProductHeaderValue("MyApp")) | ||
.ConfigurePrimaryHttpMessageHandler(config => new HttpClientHandler { AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate }); | ||
|
||
return builder.Build().RunAsync(); | ||
} | ||
} | ||
``` | ||
|
||
```csharp | ||
@page "/graphql" | ||
@using GitHubApiStatus | ||
@inject IGitHubApiStatusService GitHubApiStatusService | ||
|
||
<h1>GitHub REST Api Status</h1> | ||
|
||
<p>@_graphQLApiStatus</p> | ||
|
||
<button class="btn btn-primary" @onclick="GetGraphQLApiStatus">Get Status</button> | ||
|
||
@code { | ||
string _graphQLApiStatus = string.Empty; | ||
|
||
async Task GetGraphQLApiStatus() | ||
{ | ||
var apiRateLimitStatuses = await GitHubApiStatusService.GetApiRateLimits(System.Threading.CancellationToken.None).ConfigureAwait(false); | ||
_graphQLApiStatus = apiRateLimitStatuses.GraphQLApi.ToString(); | ||
} | ||
} | ||
``` | ||
|
||
### ASP.NET Core Example | ||
|
||
- Learn more about [Dependency Injection in ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0&WT.mc_id=mobile-11370-bramin) | ||
|
||
```csharp | ||
public class Startup | ||
{ | ||
// ... | ||
public void ConfigureServices(IServiceCollection services) | ||
{ | ||
services.AddGitHubApiStatusService(new AuthenticationHeaderValue("bearer", "[Your GitHub Personal Access Token, e.g. 123456789012345]"), new ProductHeaderValue("MyApp")) | ||
.ConfigurePrimaryHttpMessageHandler(config => new HttpClientHandler { AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate }); | ||
|
||
services.AddRazorPages(); | ||
} | ||
|
||
/// ... | ||
} | ||
``` | ||
|
||
```csharp | ||
class MyPageModel : PageModel | ||
{ | ||
readonly ILogger<IndexModel> _logger; | ||
readonly IGitHubApiStatusService _gitHubApiStatusService; | ||
|
||
public MyPageModel(IGitHubApiStatusService gitHubApiStatusService, ILogger<MyPageModel> logger) | ||
{ | ||
_logger = logger; | ||
_gitHubApiStatusService = gitHubApiStatusService; | ||
} | ||
|
||
// ... | ||
} | ||
``` | ||
|
||
### Azure Functions Example | ||
|
||
- Requires [Microsoft.Azure.Functions.Extensions NuGet Package](https://www.nuget.org/packages/Microsoft.Azure.Functions.Extensions/) | ||
- Learn More about [Azure Functions Dependency Injection](https://docs.microsoft.com/azure/azure-functions/functions-dotnet-dependency-injection?WT.mc_id=mobile-11370-bramin) | ||
|
||
```csharp | ||
[assembly: FunctionsStartup(typeof(MyApp.Functions.Startup))] | ||
namespace MyApp.Functions | ||
{ | ||
public class Startup : FunctionsStartup | ||
{ | ||
public override void Configure(IFunctionsHostBuilder builder) | ||
{ | ||
builder.Services.AddGitHubApiStatusService(new AuthenticationHeaderValue("bearer", "[Your GitHub Personal Access Token, e.g. 123456789012345]"), new ProductHeaderValue("MyApp")) | ||
.ConfigurePrimaryHttpMessageHandler(config => new HttpClientHandler { AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate }); | ||
} | ||
} | ||
} | ||
``` | ||
|
||
```csharp | ||
class GitHubApiStatusFunction | ||
{ | ||
readonly IGitHubApiStatusService _gitHubApiStatusService; | ||
|
||
public MyHttpTriggerFunction(IGitHubApiStatusService gitHubApiStatusService) => _gitHubApiStatusService = gitHubApiStatusService | ||
|
||
[FunctionName("GitHubApiStatus")] | ||
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log) | ||
{ | ||
log.LogInformation("C# HTTP trigger function processed a request."); | ||
|
||
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(2)); | ||
var apiStatus = await _gitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token).ConfigureAwait(false); | ||
|
||
return new OkObjectResult(apiStatus); | ||
} | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.