41554 blogs · [ { "id": "01a087a6-8cf3-703e-8b0e-2cfec2b34335", "title": "Implementing Idempotent REST APIs in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/implementing-idempotent-rest-apis-in-aspnetcore", "published_at": "2024-10-26T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec2caf2b2", "title": "Problem Details for ASP.NET Core APIs", "url": "https://milanjovanovic.tech/blog/problem-details-for-aspnetcore-apis", "published_at": "2024-10-19T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec3365969", "title": "Scaling the Outbox Pattern (2B+ messages per day)", "url": "https://milanjovanovic.tech/blog/scaling-the-outbox-pattern", "published_at": "2024-10-12T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec406ad74", "title": "Implementing the Outbox Pattern", "url": "https://milanjovanovic.tech/blog/implementing-the-outbox-pattern", "published_at": "2024-10-05T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec4921c84", "title": "Breaking It Down: How to Migrate Your Modular Monolith to Microservices", "url": "https://milanjovanovic.tech/blog/breaking-it-down-how-to-migrate-your-modular-monolith-to-microservices", "published_at": "2024-09-28T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec497dfa9", "title": "How I Implemented Full-Text Search On My Website", "url": "https://milanjovanovic.tech/blog/how-i-implemented-full-text-search-on-my-website", "published_at": "2024-09-21T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec4b7c6df", "title": ".NET Aspire: A Game-Changer for Cloud-Native Development?", "url": "https://milanjovanovic.tech/blog/dotnet-aspire-a-game-changer-for-cloud-native-development", "published_at": "2024-09-14T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec55aef83", "title": "Refit in .NET: Building Robust API Clients in C#", "url": "https://milanjovanovic.tech/blog/refit-in-dotnet-building-robust-api-clients-in-csharp", "published_at": "2024-09-07T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec610ac36", "title": "Introduction to Event Sourcing for .NET Developers", "url": "https://milanjovanovic.tech/blog/introduction-to-event-sourcing-for-net-developers", "published_at": "2024-08-31T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec6cbe623", "title": "Screaming Architecture", "url": "https://milanjovanovic.tech/blog/screaming-architecture", "published_at": "2024-08-24T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec6dba540", "title": "Complete Guide to Amazon SQS and Amazon SNS With MassTransit", "url": "https://milanjovanovic.tech/blog/complete-guide-to-amazon-sqs-and-amazon-sns-with-masstransit", "published_at": "2024-08-17T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec6fe72ac", "title": "5 EF Core Features You Need To Know", "url": "https://milanjovanovic.tech/blog/5-ef-core-features-you-need-to-know", "published_at": "2024-08-10T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec7b21512", "title": "Improving Code Quality in C# With Static Code Analysis", "url": "https://milanjovanovic.tech/blog/improving-code-quality-in-csharp-with-static-code-analysis", "published_at": "2024-08-03T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec83e18bd", "title": "Simple Messaging in .NET With Redis Pub/Sub", "url": "https://milanjovanovic.tech/blog/simple-messaging-in-dotnet-with-redis-pubsub", "published_at": "2024-07-27T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec88f1082", "title": "Testing Modular Monoliths: System Integration Testing", "url": "https://milanjovanovic.tech/blog/testing-modular-monoliths-system-integration-testing", "published_at": "2024-07-20T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfec9688905", "title": "Building Your First Use Case With Clean Architecture", "url": "https://milanjovanovic.tech/blog/building-your-first-use-case-with-clean-architecture", "published_at": "2024-07-13T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfeca49795c", "title": "Service Discovery in Microservices With .NET and Consul", "url": "https://milanjovanovic.tech/blog/service-discovery-in-microservices-with-net-and-consul", "published_at": "2024-07-06T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecac7f18f", "title": "Flexible PDF Reporting in .NET Using Razor Views", "url": "https://milanjovanovic.tech/blog/flexible-pdf-reporting-in-net-using-razor-views", "published_at": "2024-06-29T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecb47b131", "title": "What You Need To Know About EF Core Bulk Updates", "url": "https://milanjovanovic.tech/blog/what-you-need-to-know-about-ef-core-bulk-updates", "published_at": "2024-06-22T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecb6b542f", "title": "From Transaction Scripts to Domain Models: A Refactoring Journey", "url": "https://milanjovanovic.tech/blog/from-transaction-scripts-to-domain-models-a-refactoring-journey", "published_at": "2024-06-15T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecc2689bf", "title": "Caching in ASP.NET Core: Improving Application Performance", "url": "https://milanjovanovic.tech/blog/caching-in-aspnetcore-improving-application-performance", "published_at": "2024-06-08T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecc8d9da4", "title": "Vertical Slice Architecture: Structuring Vertical Slices", "url": "https://milanjovanovic.tech/blog/vertical-slice-architecture-structuring-vertical-slices", "published_at": "2024-06-01T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecd8c1324", "title": "Shift Left With Architecture Testing in .NET", "url": "https://milanjovanovic.tech/blog/shift-left-with-architecture-testing-in-dotnet", "published_at": "2024-05-25T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecdbb41b2", "title": "EF Core Migrations: A Detailed Guide", "url": "https://milanjovanovic.tech/blog/efcore-migrations-a-detailed-guide", "published_at": "2024-05-18T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecde776b3", "title": "Building Resilient Cloud Applications With .NET", "url": "https://milanjovanovic.tech/blog/building-resilient-cloud-applications-with-dotnet", "published_at": "2024-05-11T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfece9f76d1", "title": "Implementing API Gateway Authentication With YARP", "url": "https://milanjovanovic.tech/blog/implementing-api-gateway-authentication-with-yarp", "published_at": "2024-05-04T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfecf983735", "title": "Request-Response Messaging Pattern With MassTransit", "url": "https://milanjovanovic.tech/blog/request-response-messaging-pattern-with-masstransit", "published_at": "2024-04-27T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed07a60c4", "title": "Introduction to Distributed Tracing With OpenTelemetry in .NET", "url": "https://milanjovanovic.tech/blog/introduction-to-distributed-tracing-with-opentelemetry-in-dotnet", "published_at": "2024-04-20T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed098de04", "title": "A Clever Way To Implement Pessimistic Locking in EF Core", "url": "https://milanjovanovic.tech/blog/a-clever-way-to-implement-pessimistic-locking-in-ef-core", "published_at": "2024-04-13T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed120c377", "title": "Master Claims Transformation for Flexible ASP.NET Core Authorization", "url": "https://milanjovanovic.tech/blog/master-claims-transformation-for-flexible-aspnetcore-authorization", "published_at": "2024-04-06T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed19c4823", "title": "Horizontally Scaling ASP.NET Core APIs With YARP Load Balancing", "url": "https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing", "published_at": "2024-03-30T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed26b5172", "title": "Fast SQL Bulk Inserts With C# and EF Core", "url": "https://milanjovanovic.tech/blog/fast-sql-bulk-inserts-with-csharp-and-ef-core", "published_at": "2024-03-23T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed30f186c", "title": "Implementing Soft Delete With EF Core", "url": "https://milanjovanovic.tech/blog/implementing-soft-delete-with-ef-core", "published_at": "2024-03-16T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed372d4f0", "title": "What Is a Modular Monolith?", "url": "https://milanjovanovic.tech/blog/what-is-a-modular-monolith", "published_at": "2024-03-09T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed46a26c2", "title": "Lightweight In-Memory Message Bus Using .NET Channels", "url": "https://milanjovanovic.tech/blog/lightweight-in-memory-message-bus-using-dotnet-channels", "published_at": "2024-03-02T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed533af4d", "title": "Automatically Register Minimal APIs in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/automatically-register-minimal-apis-in-aspnetcore", "published_at": "2024-02-24T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed5ed004f", "title": "Using Scoped Services From Singletons in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/using-scoped-services-from-singletons-in-aspnetcore", "published_at": "2024-02-17T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed675c6a1", "title": "Getting the Current User in Clean Architecture", "url": "https://milanjovanovic.tech/blog/getting-the-current-user-in-clean-architecture", "published_at": "2024-02-10T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed6b7e8bb", "title": "How I Made My EF Core Query 3.42x Faster With Batching", "url": "https://milanjovanovic.tech/blog/how-i-made-my-efcore-query-faster-with-batching", "published_at": "2024-02-03T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed6ecd868", "title": "How to Build a URL Shortener With .NET", "url": "https://milanjovanovic.tech/blog/how-to-build-a-url-shortener-with-dotnet", "published_at": "2024-01-27T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed717bb7d", "title": "Balancing Cross-Cutting Concerns in Clean Architecture", "url": "https://milanjovanovic.tech/blog/balancing-cross-cutting-concerns-in-clean-architecture", "published_at": "2024-01-20T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed7954f08", "title": "Extending HttpClient With Delegating Handlers in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/extending-httpclient-with-delegating-handlers-in-aspnetcore", "published_at": "2024-01-13T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed87d3d6c", "title": "Using MassTransit with RabbitMQ and Azure Service Bus", "url": "https://milanjovanovic.tech/blog/using-masstransit-with-rabbitmq-and-azure-service-bus", "published_at": "2024-01-06T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed93fda4e", "title": "API Versioning in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/api-versioning-in-aspnetcore", "published_at": "2023-12-30T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed9d63656", "title": "Value Objects in .NET (DDD Fundamentals)", "url": "https://milanjovanovic.tech/blog/value-objects-in-dotnet-ddd-fundamentals", "published_at": "2023-12-23T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed9de5604", "title": "5 Serilog Best Practices For Better Structured Logging", "url": "https://milanjovanovic.tech/blog/5-serilog-best-practices-for-better-structured-logging", "published_at": "2023-12-16T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfed9ebaa27", "title": "Modular Monolith Data Isolation", "url": "https://milanjovanovic.tech/blog/modular-monolith-data-isolation", "published_at": "2023-12-09T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfeda644882", "title": "Global Error Handling in ASP.NET Core 8", "url": "https://milanjovanovic.tech/blog/global-error-handling-in-aspnetcore-8", "published_at": "2023-12-02T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfeda7d551f", "title": "5 Awesome C# Refactoring Tips", "url": "https://milanjovanovic.tech/blog/5-awesome-csharp-refactoring-tips", "published_at": "2023-11-25T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfeda89bf51", "title": "How To Use EF Core Interceptors", "url": "https://milanjovanovic.tech/blog/how-to-use-ef-core-interceptors", "published_at": "2023-11-18T00:00:00+00:00" }, { "id": "01a087a6-8cf3-703e-8b0e-2cfedabe84fb", "title": "How To Easily Create PDF Documents in ASP.NET Core", "url": "https://milanjovanovic.tech/blog/how-to-easily-create-pdf-documents-in-aspnetcore", "published_at": "2023-11-11T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcba0b8dbc", "title": "Vertical Slice Architecture", "url": "https://milanjovanovic.tech/blog/vertical-slice-architecture", "published_at": "2023-11-04T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcba38b485", "title": "Functional Error Handling in .NET With the Result Pattern", "url": "https://milanjovanovic.tech/blog/functional-error-handling-in-dotnet-with-the-result-pattern", "published_at": "2023-10-28T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbb154da2", "title": "CQRS Pattern With MediatR", "url": "https://milanjovanovic.tech/blog/cqrs-pattern-with-mediatr", "published_at": "2023-10-21T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbbacdf99", "title": "Improving ASP.NET Core Dependency Injection With Scrutor", "url": "https://milanjovanovic.tech/blog/improving-aspnetcore-dependency-injection-with-scrutor", "published_at": "2023-10-14T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbbc481e5", "title": "Getting Started With NServiceBus in .NET", "url": "https://milanjovanovic.tech/blog/getting-started-with-nservicebus-in-dotnet", "published_at": "2023-10-07T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbc00bec8", "title": "CQRS Validation with MediatR Pipeline and FluentValidation", "url": "https://milanjovanovic.tech/blog/cqrs-validation-with-mediatr-pipeline-and-fluentvalidation", "published_at": "2023-09-30T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbc3957ad", "title": "Monolith to Microservices: How a Modular Monolith Helps", "url": "https://milanjovanovic.tech/blog/monolith-to-microservices-how-a-modular-monolith-helps", "published_at": "2023-09-23T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbcf2f2ee", "title": "Feature Flags in .NET and How I Use Them for A/B Testing", "url": "https://milanjovanovic.tech/blog/feature-flags-in-dotnet-and-how-i-use-them-for-ab-testing", "published_at": "2023-09-16T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbdd1e4ba", "title": "Solving Race Conditions With EF Core Optimistic Locking", "url": "https://milanjovanovic.tech/blog/solving-race-conditions-with-ef-core-optimistic-locking", "published_at": "2023-09-09T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbebd4569", "title": "Testcontainers - Integration Testing Using Docker In .NET", "url": "https://milanjovanovic.tech/blog/testcontainers-integration-testing-using-docker-in-dotnet", "published_at": "2023-09-02T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcbfa385cc", "title": "Orchestration vs Choreography", "url": "https://milanjovanovic.tech/blog/orchestration-vs-choreography", "published_at": "2023-08-26T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc06855e5", "title": "Advanced Rate Limiting Use Cases In .NET", "url": "https://milanjovanovic.tech/blog/advanced-rate-limiting-use-cases-in-dotnet", "published_at": "2023-08-19T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc15c076b", "title": "Mastering Dapper Relationship Mappings", "url": "https://milanjovanovic.tech/blog/mastering-dapper-relationship-mappings", "published_at": "2023-08-12T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc215a912", "title": "Modular Monolith Communication Patterns", "url": "https://milanjovanovic.tech/blog/modular-monolith-communication-patterns", "published_at": "2023-08-05T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc2584b9d", "title": "Why Clean Architecture Is Great For Complex Projects", "url": "https://milanjovanovic.tech/blog/why-clean-architecture-is-great-for-complex-projects", "published_at": "2023-07-29T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc28daaf5", "title": "How To Use Domain Events To Build Loosely Coupled Systems", "url": "https://milanjovanovic.tech/blog/how-to-use-domain-events-to-build-loosely-coupled-systems", "published_at": "2023-07-22T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc32710e1", "title": "8 Tips To Write Clean Code", "url": "https://milanjovanovic.tech/blog/8-tips-to-write-clean-code", "published_at": "2023-07-15T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc3530650", "title": "Implementing an API Gateway For Microservices With YARP", "url": "https://milanjovanovic.tech/blog/implementing-an-api-gateway-for-microservices-with-yarp", "published_at": "2023-07-08T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc37aa240", "title": "Response Compression In ASP.NET Core", "url": "https://milanjovanovic.tech/blog/response-compression-in-aspnetcore", "published_at": "2023-07-01T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc38a22ee", "title": "Adding Real-Time Functionality To .NET Applications With SignalR", "url": "https://milanjovanovic.tech/blog/adding-real-time-functionality-to-dotnet-applications-with-signalr", "published_at": "2023-06-24T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc42e8c78", "title": "Refactoring From an Anemic Domain Model To a Rich Domain Model", "url": "https://milanjovanovic.tech/blog/refactoring-from-an-anemic-domain-model-to-a-rich-domain-model", "published_at": "2023-06-17T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc45a0895", "title": "The Right Way To Use HttpClient In .NET", "url": "https://milanjovanovic.tech/blog/the-right-way-to-use-httpclient-in-dotnet", "published_at": "2023-06-10T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc51791da", "title": "Scheduling Background Jobs With Quartz.NET", "url": "https://milanjovanovic.tech/blog/scheduling-background-jobs-with-quartz-net", "published_at": "2023-06-03T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc568ab74", "title": "How To Build a CI/CD Pipeline With GitHub Actions And .NET", "url": "https://milanjovanovic.tech/blog/how-to-build-ci-cd-pipeline-with-github-actions-and-dotnet", "published_at": "2023-05-27T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc5a88cf5", "title": "Multi-Tenant Applications With EF Core", "url": "https://milanjovanovic.tech/blog/multi-tenant-applications-with-ef-core", "published_at": "2023-05-20T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc5e0473e", "title": "Visualize Your Software Architecture With The C4 Model", "url": "https://milanjovanovic.tech/blog/visualize-your-software-architecture-with-the-c4-model", "published_at": "2023-05-13T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc6082c2b", "title": "Enforcing Software Architecture With Architecture Tests", "url": "https://milanjovanovic.tech/blog/enforcing-software-architecture-with-architecture-tests", "published_at": "2023-05-06T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc6a6d255", "title": "Health Checks In ASP.NET Core For Monitoring Your Applications", "url": "https://milanjovanovic.tech/blog/health-checks-in-asp-net-core", "published_at": "2023-04-29T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc6aaae6a", "title": "Idempotent Consumer - Handling Duplicate Messages", "url": "https://milanjovanovic.tech/blog/idempotent-consumer-handling-duplicate-messages", "published_at": "2023-04-22T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc6ad094d", "title": "EF Core Raw SQL Queries", "url": "https://milanjovanovic.tech/blog/ef-core-raw-sql-queries", "published_at": "2023-04-15T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc78a74d5", "title": "How To Use Rate Limiting In ASP.NET Core", "url": "https://milanjovanovic.tech/blog/how-to-use-rate-limiting-in-aspnet-core", "published_at": "2023-04-08T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc821f2f6", "title": "Implementing The Saga Pattern With Rebus And RabbitMQ", "url": "https://milanjovanovic.tech/blog/implementing-the-saga-pattern-with-rebus-and-rabbitmq", "published_at": "2023-04-01T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc8d8ab3b", "title": "How To Publish MediatR Notifications In Parallel", "url": "https://milanjovanovic.tech/blog/how-to-publish-mediatr-notifications-in-parallel", "published_at": "2023-03-25T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc9400a2c", "title": "Creating Data-Driven Tests With xUnit", "url": "https://milanjovanovic.tech/blog/creating-data-driven-tests-with-xunit", "published_at": "2023-03-18T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcc964900c", "title": "Using Multiple EF Core DbContexts In a Single Application", "url": "https://milanjovanovic.tech/blog/using-multiple-ef-core-dbcontext-in-single-application", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcca254622", "title": "How To Apply Functional Programming In C#", "url": "https://milanjovanovic.tech/blog/how-to-apply-functional-programming-in-csharp", "published_at": "2023-03-04T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccab8789a", "title": "Outbox Pattern For Reliable Microservices Messaging", "url": "https://milanjovanovic.tech/blog/outbox-pattern-for-reliable-microservices-messaging", "published_at": "2023-02-25T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccb7711ad", "title": "Structured Logging In ASP.NET Core With Serilog", "url": "https://milanjovanovic.tech/blog/structured-logging-in-asp-net-core-with-serilog", "published_at": "2023-02-18T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccc0cceb8", "title": "Messaging Made Easy With Azure Service Bus", "url": "https://milanjovanovic.tech/blog/messaging-made-easy-with-azure-service-bus", "published_at": "2023-02-11T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccd025b37", "title": "Working With Transactions In EF Core", "url": "https://milanjovanovic.tech/blog/working-with-transactions-in-ef-core", "published_at": "2023-02-04T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccdd0b659", "title": "How To Implement API Key Authentication In ASP.NET Core", "url": "https://milanjovanovic.tech/blog/how-to-implement-api-key-authentication-in-aspnet-core", "published_at": "2023-01-28T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccec72e4b", "title": "C# Yield Return Statement", "url": "https://milanjovanovic.tech/blog/csharp-yield-return-statement", "published_at": "2023-01-21T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccf533837", "title": "Unleash EF Core Performance With Compiled Queries", "url": "https://milanjovanovic.tech/blog/unleash-ef-core-performance-with-compiled-queries", "published_at": "2023-01-14T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccf76b3c5", "title": "Adding Validation To The Options Pattern In ASP.NET Core", "url": "https://milanjovanovic.tech/blog/adding-validation-to-the-options-pattern-in-asp-net-core", "published_at": "2023-01-07T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bccfa33624", "title": "How To Be a Better Software Engineer In 2023", "url": "https://milanjovanovic.tech/blog/how-to-be-a-better-software-engineer-in-2023", "published_at": "2022-12-31T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcd088c5cb", "title": "Clean Architecture And The Benefits Of Structured Software Design", "url": "https://milanjovanovic.tech/blog/clean-architecture-and-the-benefits-of-structured-software-design", "published_at": "2022-12-24T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcd0d485b8", "title": "Fast Document Database In .NET With Marten", "url": "https://milanjovanovic.tech/blog/fast-document-database-in-net-with-marten", "published_at": "2022-12-17T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcd140e5bc", "title": "How To Structure Minimal APIs", "url": "https://milanjovanovic.tech/blog/how-to-structure-minimal-apis", "published_at": "2022-12-10T00:00:00+00:00" }, { "id": "01a087a6-8cf4-7017-b770-f1bcd14bf86b", "title": "Running Background Tasks In ASP.NET Core", "url": "https://milanjovanovic.tech/blog/running-background-tasks-in-asp-net-core", "published_at": "2022-12-03T00:00:00+00:00" } ] posts Claim your blog
Back to milanjovanovic.tech
Blog · corpus.blog/blogs/milanjovanovic.tech/posts

milanjovanovic.tech

milanjovanovic.tech

2024

2023

2022