Skip to content

Instantly share code, notes, and snippets.

View DamianEdwards's full-sized avatar
🏠
Working from home

Damian Edwards DamianEdwards

🏠
Working from home
View GitHub Profile
@DamianEdwards
DamianEdwards / Program.cs
Last active August 24, 2023 17:31
Auto-sized number parsing with System.Text.Json
using System.Numerics;
using System.Text;
using System.Text.Json;
using System.Text.Unicode;
var json = """
{
"anInt": 123,
"negativeInt": -123,
"biggerInt": 1234567890,
@DamianEdwards
DamianEdwards / Output.txt
Created January 4, 2023 01:22
PathGenerator utility for ASP.NET Core that generates URL paths (e.g. for links) using patterns that follow usual route syntax and provided values.
** Value Objects **
/user/123/posts?page=2&f=&q=test%20with%20spaces
/user/123/posts/?page=2&f=&q=test%20with%20spaces
user/123/posts?page=2
user/123/entity%20with%20spaces?page=2
/user/123?page=2
/user/123/posts?page=2
** Ordinal **
/user/123/posts?page=2
@DamianEdwards
DamianEdwards / Index.cshtml
Last active November 19, 2022 00:10
Example ASP.NET Core Razor Page in C# that calls a quotes REST API with fallback to offline quotes in case of failure
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
<div class="card">
<div class="card-body">
@await Model.GetInspirationalQuote()
</div>
<div class="card-footer">
@DamianEdwards
DamianEdwards / Program.cs
Created November 5, 2022 04:02
GZip a string and base64 encode the result in C# (.NET 7)
using System.Buffers;
using System.Buffers.Text;
using System.Diagnostics;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Text;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
BenchmarkRunner.Run<Benchmarks>();
@DamianEdwards
DamianEdwards / Program.cs
Created October 20, 2022 22:07
Disable the `AuthenticationHandler`'s new behavior of setting the default authentication scheme to the single scheme registered when there is only one
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.Options;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
@DamianEdwards
DamianEdwards / GetProjectVersion.targets
Created October 18, 2022 17:35
Example of .NET console app (that could be made into a cmd line tool) that uses MSBuild to extract project version
<!-- Put this in sub-directory of the project named 'assets' -->
<Project>
<Target Name="_ExtractVersionMetadata">
<WriteLinesToFile File="$(_ProjectVersionMetadataFile)" Lines="$(Version)" />
</Target>
</Project>
@DamianEdwards
DamianEdwards / Program.cs
Created August 6, 2022 00:32
Some SwashBuckling with .NET 7 rc.1
using System.Buffers.Text;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
@DamianEdwards
DamianEdwards / WebApplicationAuthorizationBuilder.cs
Created June 16, 2022 19:05
Prototype pseudo-implementation of WebApplicationAuthorizationBuilder
public class WebApplicationAuthorizationBuilder
{
private readonly WebApplicationBuilder _builder;
public WebApplicationAuthorizationBuilder(WebApplicationBuilder builder)
{
_builder = builder;
}
public WebApplicationAuthorizationBuilder AddPolicy(
@DamianEdwards
DamianEdwards / EndpointRoutingBuilders.md
Last active November 22, 2022 19:24
ASP.NET Core middleware & endpoint routing type & extension hierarchy
  • IApplicationBuilder Used to configure the application middleware pipeline
    • Map() -> IApplicationBuilder
    • MapWhen() -> IApplicationBuilder
    • Run() -> void
    • Use() -> IApplicationBuilder
    • UseMiddleware() -> IApplicationBuilder
    • UsePathBase() -> IApplicationBuilder
    • UseRouting() -> IApplicationBuilder
    • UseRouter(Action<IRouteBuilder> action) -> IApplicationBuilder
    • UseEndpointPoints() -> IApplicationBuilder
@DamianEdwards
DamianEdwards / Program.cs
Last active March 6, 2022 04:20
Endpoint Groups
app.MapGroup("/apis", apis =>
{
apis.UseExceptionHandler("/error");
var problemJsonMediaType = new MediaTypeHeaderValue("application/problem+json");
apis.MapGet("/error", (HttpContext context) =>
{
// Get exception details
var error = context.Features.Get<IExceptionHandlerFeature>()?.Error;
var badRequestEx = error as BadHttpRequestException;