Welcome to Ryan Williams' Developer Blog




Block AI Crawlers in ASP.NET Core

How To Block AI Crawlers Like GPTBot and ClaudeBot in ASP.NET Core and IIS

Stop GPTBot, ClaudeBot, PerplexityBot, CCBot and other AI crawlers with robots.txt, ASP.NET Core middleware, or an IIS rule, without blocking Google or Bing.


Internet Radio Station on a VPS

How To Start an Internet Radio Station on a VPS (AzuraCast, Icecast or SHOUTcast)

Run a 24/7 internet radio station on a cheap Linux VPS: AzuraCast in one command, or Icecast with a Liquidsoap AutoDJ, plus SHOUTcast, bandwidth and licensing.


Tor Onion Service on Linux With nginx

How To Host a Tor Onion Service on Linux With nginx and ASP.NET Core

Make a .onion version of your website on Ubuntu or Debian: install Tor from the official repo, set up torrc and nginx, handle HTTPS redirects, and back up keys.

Tagged: ASP.NET Core

Monero Payments With monero-wallet-rpc in C#

Accept Monero Payments Yourself With monero-wallet-rpc and C#

Self-hosted Monero (XMR) payments in ASP.NET Core with a view-only wallet, monero-wallet-rpc, one subaddress per order, and a payment-watching background job.


Cloudflare and Azure Blob Storage CDN

Low-Cost Image Hosting: Azure Blob Storage + Cloudflare (Custom Domain + SSL)

Serve Azure Blob Storage from cdn.yourdomain.com via Cloudflare: proxied CNAME, asverify indirect validation (grey cloud), Full (strict) SSL, cache headers.

Tagged: Azure

How To Create A TOR Link On Windows Server

How To Create a Tor .onion Site on Windows Server (IIS)

Host an IIS site as a Tor .onion service on Windows Server: where torrc lives (%APPDATA%\tor\torrc), the exact config, running Tor as a service, key backups.

Tagged: Window Server

Monero Payments with NOWPayments in C#

Accepting Monero Payments with the NOWPayments API in C#

C# guide to the NOWPayments API: create a Monero (XMR) invoice, redirect to invoice_url, and verify x-nowpayments-sig IPN callbacks with HMAC-SHA512.


Custom Caching Tag ASP.NET

ASP.NET Core: On-Demand Cache Expiration with Custom Tag Helpers

Discover how to craft a custom cache tag helper in ASP.NET Core. Seamlessly merge Razor view caching with on-demand expiration for optimal backend performance.

Tagged: ASP.NET, C Sharp

How To Remove ASP.NET Server Headers

Removing ASP.NET Server Headers in ASP.NET Core and IIS

Hide the Server: Kestrel, Server: Microsoft-IIS and X-Powered-By headers with the exact Program.cs and web.config settings for ASP.NET Core and IIS 10.

Tagged: ASP.NET Core

Locked Files Publishing .NET Core Apps

Locked Files When Publishing .NET Core Apps to IIS with MSDeploy

Web Deploy says your DLL is locked by an external process? MSDEPLOY_RENAME_LOCKED_FILES only works on Azure. On IIS, enable ASP.NET Core shadow copying.