Skip to content

Instantly share code, notes, and snippets.

View DamianEdwards's full-sized avatar

Damian Edwards DamianEdwards

View GitHub Profile
@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 October 14, 2024 21:27
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;
// Now
app.MapGet("/todos/{id}", async (int id, TodoDb db) =>
await db.Todos.FindAsync(id)
is Todo todo
? Results.Ok(todo)
: Results.NotFound())
.WithName("GetTodoById")
.Produces<Todo>(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound);
@DamianEdwards
DamianEdwards / Program.cs
Last active February 16, 2022 01:43
Potential ASP.NET Core Minimal APIs use of C# Discriminated Unions (DU)
// Ref: https://github.com/cston/csharplang/blob/DiscriminatedUnions/proposals/tagged-unions.md
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using MiniValidation;
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("TodoDb") ?? "Data Source=todos.db";
builder.Services.AddSqlite<TodoDb>(connectionString);
@DamianEdwards
DamianEdwards / Microsoft.PowerShell_profile.ps1
Last active March 21, 2026 17:07
PowerShell Profile & oh-my-posh theme
function Get-ProgramFiles32() {
if ($null -ne ${env:ProgramFiles(x86)}) {
return ${env:ProgramFiles(x86)}
}
return $env:ProgramFiles
}
function Get-VsInstallLocation() {
$programFiles = Get-ProgramFiles32
$vswhere = "$programFiles\Microsoft Visual Studio\Installer\vswhere.exe"
@DamianEdwards
DamianEdwards / craver-vs.omp.json
Last active July 13, 2023 00:23
My oh-my-posh profile
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"foreground": "#f1184c",
"properties": {
"template": " \uf0e7 "
@DamianEdwards
DamianEdwards / vs.omp.json
Last active October 6, 2021 19:33
Trying to make an oh-my-posh text segment that hides itself when there's no value
{
"type": "text", // VS version
"style": "powerline",
"powerline_symbol": "\uE0C4",
"foreground": "#ffffff",
"background": "#5C2D91", // VS purple from https://visualstudio.microsoft.com/
"properties": {
"prefix": "",
"text": "{{if .Env.VSCMD_VER}} ﬏ {{.Env.VSCMD_VER}} {{end}}",
"postfix": ""