{"id":1086,"date":"2025-04-07T22:49:35","date_gmt":"2025-04-07T22:49:35","guid":{"rendered":"https:\/\/oussamasaidi.com\/?p=1086"},"modified":"2025-12-20T11:14:43","modified_gmt":"2025-12-20T11:14:43","slug":"logging-centralise-avec-opentelemetry-dans-net-core","status":"publish","type":"post","link":"https:\/\/oussamasaidi.com\/en\/logging-centralise-avec-opentelemetry-dans-net-core\/","title":{"rendered":"Logging Centralis\u00e9 avec OpenTelemetry dans .NET Core"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/opentelemetry.io\/img\/otel-diagram.svg\" alt=\"Architecture OpenTelemetry pour le logging centralis\u00e9\" title=\"Sch\u00e9ma technique OpenTelemetry\"\/><\/figure>\n<\/div>\n\n\n<p>Diagramme officiel OpenTelemetry montrant le flux de donn\u00e9es. <a href=\"https:\/\/opentelemetry.io\" target=\"_blank\" rel=\"noreferrer noopener\">Source originale<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Introduction<\/strong><\/h2>\n\n\n\n<p>Dans le monde du d\u00e9veloppement moderne, la gestion des logs est devenue un \u00e9l\u00e9ment critique pour assurer la stabilit\u00e9 et la performance des applications. OpenTelemetry \u00e9merge comme la solution ultime pour impl\u00e9menter une strat\u00e9gie de logging centralis\u00e9e efficace.<\/p>\n\n\n\n<p>Ce guide vous montrera comment:<br>&#x2714;&#xfe0f; Configurer OpenTelemetry dans un projet .NET<br>&#x2714;&#xfe0f; Exporter vos logs vers diff\u00e9rents backends<br>&#x2714;&#xfe0f; Mettre en place des bonnes pratiques professionnelles<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Pourquoi OpenTelemetry ? Comparaison avec les Alternatives<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Les Limites des Solutions Traditionnelles<\/strong><\/h3>\n\n\n\n<p>Les outils classiques comme Serilog ou NLog pr\u00e9sentent plusieurs inconv\u00e9nients:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Manque de standardisation<\/strong> entre les diff\u00e9rents syst\u00e8mes<\/li>\n\n\n\n<li><strong>Difficult\u00e9 \u00e0 corr\u00e9ler<\/strong> logs, traces et m\u00e9triques<\/li>\n\n\n\n<li><strong>D\u00e9ploiement complexe<\/strong> dans les architectures distribu\u00e9es<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Les Avantages Cl\u00e9s d&rsquo;OpenTelemetry<\/strong><\/h3>\n\n\n\n<p>Contrairement aux alternatives, OpenTelemetry offre:<br>&#x2705; <strong>Un standard ouvert<\/strong> soutenu par la CNCF<br>&#x2705; <strong>Une instrumentation automatique<\/strong> pour de nombreux frameworks<br>&#x2705; <strong>Une int\u00e9gration transparente<\/strong> avec les principaux backends (Prometheus, Jaeger, etc.)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Installation et Configuration de Base<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Packages NuGet Essentiels<\/strong><\/h3>\n\n\n\n<p>Commencez par installer ces packages:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">dotnet add package OpenTelemetry\ndotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Console<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Configuration Minimale<\/strong><\/h3>\n\n\n\n<p>Voici comment initialiser OpenTelemetry:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var builder = WebApplication.CreateBuilder(args);\n\nbuilder.Logging.AddOpenTelemetry(options =&amp;gt; {\n    options.AddConsoleExporter();\n    options.IncludeScopes = true;\n    options.ParseStateValues = true;\n});<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Exportation Vers Diff\u00e9rents Backends<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Configuration pour Jaeger<\/strong><\/h3>\n\n\n\n<p>Pour envoyer vos traces vers Jaeger:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">builder.Services.AddOpenTelemetryTracing(builder =&amp;gt; {\n    builder.AddAspNetCoreInstrumentation()\n           .AddJaegerExporter(o =&amp;gt; {\n               o.AgentHost = \"localhost\";\n               o.AgentPort = 6831;\n           });\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Int\u00e9gration avec Prometheus<\/strong><\/h3>\n\n\n\n<p>Pour exporter des m\u00e9triques:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">builder.Services.AddOpenTelemetryMetrics(builder =&amp;gt; {\n    builder.AddAspNetCoreInstrumentation()\n           .AddPrometheusExporter();\n});<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Bonnes Pratiques Avanc\u00e9es<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Filtrage des Logs<\/strong><\/h3>\n\n\n\n<p>\u00c9vitez la surcharge avec:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">options.AddProcessor(new FilteringLogRecordProcessor(\n    new SimpleLogRecordExportProcessor(new ConsoleLogRecordExporter()),\n    logRecord =&amp;gt; logRecord.Severity &amp;gt; LogLevel.Debug));<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Enrichissement des Donn\u00e9es<\/strong><\/h3>\n\n\n\n<p>Ajoutez des informations contextuelles:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">options.AddProcessor(new EnrichingProcessor());<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Gestion des Erreurs<\/strong><\/h3>\n\n\n\n<p>Configurez un fallback en cas d&rsquo;\u00e9chec d&rsquo;export:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">options.AddProcessor(new BatchExportProcessor&amp;lt;LogRecord&amp;gt;(\n    new ConsoleLogRecordExporter(),\n    maxQueueSize: 2000,\n    scheduledDelayMilliseconds: 5000));<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Cas d&rsquo;Usage R\u00e9els<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Microservices<\/strong><\/h3>\n\n\n\n<p>Dans une architecture distribu\u00e9e:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Corr\u00e9lation entre services<\/strong> via le tracing<\/li>\n\n\n\n<li><strong>D\u00e9tection rapide des goulots d&rsquo;\u00e9tranglement<\/strong><\/li>\n\n\n\n<li><strong>Surveillance unifi\u00e9e<\/strong> des diff\u00e9rents composants<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Applications Cloud-Native<\/strong><\/h3>\n\n\n\n<p>Avantages cl\u00e9s:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Int\u00e9gration native<\/strong> avec Kubernetes<\/li>\n\n\n\n<li><strong>Export vers<\/strong> Azure Monitor, AWS X-Ray ou GCP Operations<\/li>\n\n\n\n<li><strong>Auto-scaling<\/strong> bas\u00e9 sur les m\u00e9triques<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FAQ<\/strong><\/h2>\n\n\n\n<p><strong>Q: OpenTelemetry remplace-t-il Serilog\/NLog?<\/strong><br>R: Non, il peut fonctionner en compl\u00e9ment pour la centralisation des logs.<\/p>\n\n\n\n<p><strong>Q: Quel backend choisir?<\/strong><br>R: Jaeger pour le debugging, Prometheus pour les m\u00e9triques, ELK pour la recherche full-text.<\/p>\n\n\n\n<p><strong>Q: Comment g\u00e9rer les donn\u00e9es sensibles?<\/strong><br>R: Utilisez les processors pour filtrer\/masquer les informations critiques.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion et Prochaines \u00c9tapes<\/strong><\/h2>\n\n\n\n<p>OpenTelemetry transforme la gestion des observabilit\u00e9s en proposant:<br> &#8211; <strong>Une solution unifi\u00e9e<\/strong> pour logs, traces et m\u00e9triques<br><strong> &#8211; Une int\u00e9gration transparente<\/strong> avec l&rsquo;\u00e9cosyst\u00e8me .NET<br><strong> &#8211; Une r\u00e9duction significative<\/strong> de la complexit\u00e9 op\u00e9rationnelle<\/p>\n\n\n\n<p><strong>Pour aller plus loin<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/opentelemetry.io\/docs\/\" target=\"_blank\" rel=\"noreferrer noopener\">Documentation officielle OpenTelemetry<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/oussamasaidi.com\/en\/serilog-in-aspnet-core-3-1\/\" title=\"\">Ma\u00eetriser les Logs Structur\u00e9s avec Serilog dans ASP.NET Core 8<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Diagramme officiel OpenTelemetry montrant le flux de donn\u00e9es. Source originale. Introduction Dans le monde du d\u00e9veloppement moderne, la gestion des&#8230; <\/p>\n<div class=\"art-el-more\"><a href=\"https:\/\/oussamasaidi.com\/en\/logging-centralise-avec-opentelemetry-dans-net-core\/\" class=\"art-link art-color-link art-w-chevron\">Read more<\/a><\/div>","protected":false},"author":1,"featured_media":1104,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[40,45,41,56,84,82,83,42,43,46],"tags":[47,48,49,54,97,50,51,52],"ppma_author":[286],"class_list":["post-1086","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-netcore","category-asp-net","category-c","category-c-2","category-ef-core","category-entity-framework-core","category-entity-framework-core-2","category-log","category-logging","category-serilog","tag-net-core","tag-asp-net","tag-c-sharp","tag-c","tag-clean-code","tag-log","tag-logging","tag-serilog"],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2025\/04\/ChatGPT-Image-8-avr.-2025-00_36_08.png","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":399,"url":"https:\/\/oussamasaidi.com\/en\/serilog-in-aspnet-core-3-1\/","url_meta":{"origin":1086,"position":0},"title":"Ma\u00eetriser les Logs Structur\u00e9s avec Serilog dans ASP.NET Core 8","author":"Saidi Oussama","date":"September 21, 2022","format":false,"excerpt":"Guide Complet Serilog avec Exemples pour SQL Server et le Cloud Introduction Aujourd'hui, les applications modernes g\u00e9n\u00e8rent des volumes croissants de donn\u00e9es. Pour les d\u00e9velopper efficacement, une solution de journalisation robuste devient indispensable. Parmi les outils disponibles, Serilog se distingue comme l'une des meilleures biblioth\u00e8ques de logging pour .NET. Dans\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/07\/serilog-dotnet-core.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":660,"url":"https:\/\/oussamasaidi.com\/en\/best-libraries-for-aspnet-core\/","url_meta":{"origin":1086,"position":1},"title":"15 meilleures biblioth\u00e8ques pour les d\u00e9veloppeurs ASP.NET Core","author":"Saidi Oussama","date":"November 23, 2022","format":false,"excerpt":"Plusieurs nouveaux d\u00e9veloppeurs font quotidiennement leurs premiers pas dans ASP.Net Core pour leur carri\u00e8re de d\u00e9veloppement Web. Choisir et ma\u00eetriser les meilleures biblioth\u00e8ques qui aident \u00e0 optimiser l'exp\u00e9rience de d\u00e9veloppement est le facteur d\u00e9cisif pour toute technologie. Avec la croissance rapide de .NET Core au cours des derni\u00e8res ann\u00e9es, plusieurs\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/pngaaa.com-592393.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1714,"url":"https:\/\/oussamasaidi.com\/en\/https-oussamasaidi-com-restful-api-mastery-best-practices-with-asp-net-core-part-2\/","url_meta":{"origin":1086,"position":2},"title":"RESTful API best practices\u00a0with ASP.NET Core Part 2","author":"Saidi Oussama","date":"December 20, 2025","format":false,"excerpt":"Testing, Performance, Security, Microservices & Deployment Introduction: From Solid Foundations to Production Excellence In Part 1 of RESTful API Mastery, we established the architectural and technical foundations required to build reliable, evolvable RESTful APIs with ASP.NET Core. However, a well-designed API only becomes truly valuable when it is tested, observable,\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"RESTful API Mastery","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-2r.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":931,"url":"https:\/\/oussamasaidi.com\/en\/net-9-entity-framework-core-what-is-new\/","url_meta":{"origin":1086,"position":3},"title":"Les Nouveaut\u00e9s d&rsquo;Entity Framework Core avec .NET 9 : Ce Qu&rsquo;il Faut Savoir","author":"Saidi Oussama","date":"January 6, 2025","format":false,"excerpt":"La sortie de .NET 9 s\u2019accompagne de mises \u00e0 jour significatives dans Entity Framework Core (EF Core), le c\u00e9l\u00e8bre ORM de Microsoft. Ces nouveaut\u00e9s visent \u00e0 simplifier les sc\u00e9narios complexes et \u00e0 am\u00e9liorer les performances, la compatibilit\u00e9 cloud et l\u2019int\u00e9gration IA. Voici les cinq principales nouveaut\u00e9s qui transformeront vos projets.\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/01\/DALL%C2%B7E-2025-01-06-15.03.46-A-professional-and-modern-banner-image-for-a-WordPress-blog-article-about-the-new-features-of-Entity-Framework-Core-with-.NET-9.-The-design-should-inc.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/01\/DALL%C2%B7E-2025-01-06-15.03.46-A-professional-and-modern-banner-image-for-a-WordPress-blog-article-about-the-new-features-of-Entity-Framework-Core-with-.NET-9.-The-design-should-inc.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/01\/DALL%C2%B7E-2025-01-06-15.03.46-A-professional-and-modern-banner-image-for-a-WordPress-blog-article-about-the-new-features-of-Entity-Framework-Core-with-.NET-9.-The-design-should-inc.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/01\/DALL%C2%B7E-2025-01-06-15.03.46-A-professional-and-modern-banner-image-for-a-WordPress-blog-article-about-the-new-features-of-Entity-Framework-Core-with-.NET-9.-The-design-should-inc.webp?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1565,"url":"https:\/\/oussamasaidi.com\/en\/securing-sensitive-information-in-net-core\/","url_meta":{"origin":1086,"position":4},"title":"Securing Sensitive Information in .NET Core: A Complete Guide for Developers","author":"Saidi Oussama","date":"December 8, 2025","format":false,"excerpt":"Protecting user data is one of the most critical responsibilities of any software developer. In today\u2019s connected world, even a small leakage of sensitive information \u2014 API keys, passwords, or tokens \u2014 can have devastating consequences. Fortunately, .NET Core (or .NET 9 and later) offers several mechanisms to help you\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"Securing sensitive Information in .NET Core","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/securing-sensitive-information-in-net-core.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":1639,"url":"https:\/\/oussamasaidi.com\/en\/restful-api-mastery-best-practices-with-asp-net-core\/","url_meta":{"origin":1086,"position":5},"title":"RESTful API Best Practices with ASP.NET Core","author":"Saidi Oussama","date":"December 16, 2025","format":false,"excerpt":"Professional Best Practices, Versioning Strategies & Advanced Serialization (Part 1) In this blog Introduction: Building Enterprise-Grade RESTful APIs with ASP.NET Core1. RESTful APIs in the Modern ASP.NET Core EcosystemWhy REST Still Dominates2. REST Architectural Constraints Every ASP.NET Core API Must EnforceClient\u2013Server SeparationStatelessnessUniform Interface3. Establishing a Clean and Scalable ASP.NET Core\u2026","rel":"","context":"In &quot;.Net Core&quot;","block_context":{"text":".Net Core","link":"https:\/\/oussamasaidi.com\/en\/category\/netcore\/"},"img":{"alt_text":"RESTful API Mastery","src":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/oussamasaidi.com\/wp-content\/uploads\/2025\/12\/restful-api-mastery-best-practices-with-asp-net-core-cover-scaled.png?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"authors":[{"term_id":286,"user_id":1,"is_guest":0,"slug":"oussama_sa","display_name":"Saidi Oussama","avatar_url":{"url":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/001_001_cv1.jpg","url2x":"https:\/\/oussamasaidi.com\/wp-content\/uploads\/2022\/02\/001_001_cv1.jpg"},"author_category":"1","first_name":"Oussama","last_name":"SAIDI","user_url":"https:\/\/oussamasaidi.com","job_title":"Senior Fullstack .NET Developer","description":"I\u2019m a Senior Fullstack .NET Developer specializing in building scalable, high-performance web applications with .NET, C#, and modern frontend frameworks like React.js. I\u2019m passionate about clean architecture, automated testing, and sharing knowledge through blogs and tutorials."}],"_links":{"self":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/1086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/comments?post=1086"}],"version-history":[{"count":10,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/1086\/revisions"}],"predecessor-version":[{"id":1740,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/posts\/1086\/revisions\/1740"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/media\/1104"}],"wp:attachment":[{"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/media?parent=1086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/categories?post=1086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/tags?post=1086"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/oussamasaidi.com\/en\/wp-json\/wp\/v2\/ppma_author?post=1086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}