Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
Series
.NET Core Web API
36
Angular
31
JavaScript Basics
19
JavaScript Intermediate
18
JavaScript Advanced
16
TypeScript Basics
14
TypeScript Intermediate
14
TypeScript Advanced
12
Entity Framework Core
28
Dapper
16
Git & GitHub
29
Web Security (OWASP Top 10)
21
LLM Fundamentals
20
C# Fundamentals
20
Object-Oriented Programming in C#
16
C# Collections and Generics
11
LINQ
17
Asynchronous Programming in C#
17
Advanced C#
14
C# Versions
6
Solution Patterns
22
SOLID and Design Principles
12
Clean Code
13
Design Patterns
23
UML and Modeling
18
Introduction to Software Architecture
9
Clean, Onion and Hexagonal Architecture
8
Vertical Slice Architecture
6
Domain-Driven Design
12
CQRS and Event Sourcing
10
Messaging and Event-Driven Architecture
9
Modular Monolith
2
Microservices
10
UI Architecture Patterns
9
Architecture Decisions
7
System Design
15
Distributed Systems Fundamentals
11
Background Jobs and Scheduled Jobs
11
Working with Message Queues
14
Logging in .NET
10
Caching
10
Real-time Applications
9
ASP.NET Core MVC and Razor Pages
13
CI/CD Fundamentals
8
GitHub Actions
16
Jenkins
12
Web Servers and Hosting
12
Deployment Strategies
9
Kubernetes
19
Authentication and Authorization
18
Security
PART 07
Observing Security Events in ASP.NET Core: Authentication, Authorization and Identity Metrics, Audit Trails and Alerts
.NET 10's authentication, authorization and Identity metrics count 401s, 403s and account lockouts but deliberately carry no user or policy name; who did what and when is the audit trail's job. We collect the metrics with OpenTelemetry and Prometheus, verify the real labels with a test, write alert rules and build a hash-chained audit trail that detects tampering.
8 Nov 2026
10 min
5
Database
PART 21
EF Core Interceptors and Events: Audit Fields and Slow Query Logging
We fill CreatedAt and UpdatedAt automatically with a SaveChangesInterceptor, log queries over a threshold with a DbCommandInterceptor, and watch the change tracker live through SavingChanges and StateChanged events. We also see why nothing runs when you forget the async override.
5 Nov 2026
10 min
26