Skip to main content
PageTech Solutions Limited logo Turning Complex Problems Into Confident Technology
  • Services
  • About
  • Testimonials
  • Portfolio
  • FAQ
  • Pricing
  • Availability
  • Contact
  1. Home
  2. Portfolio
  3. C# Azure Functions API Layer

Case study

C# Azure Functions API Layer

The site backend rewritten from Node.js to .NET 10 — a shared services library, unit-tested before the port, shipped through the same pipeline.

C# / .NET 10Azure FunctionsxUnitManaged Identity

Read this case study on its own page

Challenge

The site's original Node.js API had grown to carry real complexity — database connection management, OAuth against Google Ads, Graph email, circuit breakers, rate limiting — and needed the type safety and structured testing a compiled language gives. It also made sense for the business's own backend to be a working example of the C#/.NET practice it sells.

Approach

A full rewrite to C# on the .NET 10 isolated worker. The shared behaviour was extracted first into a library — a database connection factory that supports credential-free managed identity, typed analytics services, the attribution recorder, Graph email with HTML templates, the Google Ads conversion service with token refresh and an exponential-backoff circuit breaker, GA4 reporting, bot-check verification, rate limiting, an email-domain classifier and asynchronous mail-server enrichment for contact submissions. Unit tests were written before the port, and the new API was delivered through the existing artifact-promotion pipeline without disrupting live traffic. The library has since grown to cover the CV request flow, YouTube authentication and contact identity resolution.

Outcome

  • Type safety across the whole API layer and several hundred unit tests covering validators, services and handlers
  • Contact submissions enriched with domain type and mail-server checks before they reach the inbox
  • Credential-free database access — no connection strings to rotate
  • A circuit breaker on the Google Ads API stops quota pressure cascading
  • Duplication between endpoints reduced to near zero

Where judgement mattered

  • Extract the shared library before porting anything, so the port had something to test against
  • Tests first, then migration, then cut-over — with the old implementation still serving until the new one proved itself
  • Same pipeline, same environments: the rewrite changed the runtime, not the delivery process

Technology stack

C# / .NET 10 isolated worker · Azure Functions · Azure SQL with managed identity · Microsoft Graph SDK · Google Ads and GA4 APIs · xUnit and Moq · Azure DevOps CI/CD

Book a free 20-minute consultation Back to the portfolio

© 2026 PageTech Solutions Limited. All rights reserved.

Company no. 17014904

VAT no. 514295790

Registered office: Belmont Suite, Paragon Business Park, Chorley New Road, Bolton, Lancashire, BL6 6HG

ICO registration no. ZC179729

I use Microsoft Clarity to improve this site's usability, operated on the basis of legitimate interest. See my privacy policy for details.

Visa Mastercard American Express PayPal

Contact Hours

Monday 09:00–12:00, 13:00–17:00
Tuesday 09:00–12:00, 13:00–17:00
Wednesday 09:00–12:00, 13:00–17:00
Thursday 09:00–12:00, 13:00–17:00
Friday 09:00–12:00, 13:00–17:00
Saturday Closed
Sunday Closed
UK time (GMT/BST)

Phone: 01264 354354

ContactTestimonialsPortfolioAvailabilityPrivacyTermsAccessibilitySite mapBook a free 20-minute consultationLinkedInX (Twitter)Bluesky