[{"data":1,"prerenderedAt":393},["ShallowReactive",2],{"i-feather:search":3,"i-feather:x":8,"i-feather:moon":10,"i-feather:sun":12,"i-fa-brands:youtube":14,"i-fa-brands:twitch":18,"i-fa-brands:github":20,"i-fa-brands:linkedin":23,"i-fa-brands:stack-overflow":26,"i-simple-icons:bluesky":29,"i-fa-brands:mastodon":31,"i-fa-regular:envelope":33,"i-fa-solid:rss":35,"tag-net":37},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003Cpath d=\"m21 21l-4.35-4.35\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 12.79A9 9 0 1 1 11.21 3A7 7 0 0 0 21 12.79\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"5\"\u002F>\u003Cpath d=\"M12 1v2m0 18v2M4.22 4.22l1.42 1.42m12.72 12.72l1.42 1.42M1 12h2m18 0h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":15,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":17},576,512,"\u003Cpath fill=\"currentColor\" d=\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597c-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821c11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"currentColor\" d=\"M391.17 103.47h-38.63v109.7h38.63ZM285 103h-38.63v109.75H285ZM120.83 0L24.31 91.42v329.16h115.83V512l96.53-91.42h77.25L487.69 256V0Zm328.24 237.75l-77.22 73.12h-77.24l-67.6 64v-64h-86.87V36.58h308.93Z\"\u002F>",{"left":4,"top":4,"width":21,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":22},496,"\u003Cpath fill=\"currentColor\" d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":25},448,"\u003Cpath fill=\"currentColor\" d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5c0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7c-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5c67.2 0 79.7 44.3 79.7 101.9z\"\u002F>",{"left":4,"top":4,"width":27,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":28},384,"\u003Cpath fill=\"currentColor\" d=\"M290.7 311L95 269.7L86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8l153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24l119.3 160.3l32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":30},"\u003Cpath fill=\"currentColor\" d=\"M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037c-.856 3.061-3.978 3.842-6.755 3.37c4.854.826 6.089 3.562 3.422 6.299c-5.065 5.196-7.28-1.304-7.847-2.97c-.104-.305-.152-.448-.153-.327c0-.121-.05.022-.153.327c-.568 1.666-2.782 8.166-7.847 2.97c-2.667-2.737-1.432-5.473 3.422-6.3c-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":32},"\u003Cpath fill=\"currentColor\" d=\"M433 179.11c0-97.2-63.71-125.7-63.71-125.7c-62.52-28.7-228.56-28.4-290.48 0c0 0-63.72 28.5-63.72 125.7c0 115.7-6.6 259.4 105.63 289.1c40.51 10.7 75.32 13 103.33 11.4c50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7c56.12-6.7 105-41.3 111.23-72.9c9.8-49.8 9-121.5 9-121.5m-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175c25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5l11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1c23.71 27.3 18.4 53 18.4 175z\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":34},"\u003Cpath fill=\"currentColor\" d=\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48m0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49c-16.841 13.247-50.201 45.072-73.413 44.701c-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646c21.857 17.205 60.134 55.186 103.062 54.955c42.717.231 80.509-37.199 103.053-54.947c49.528-38.783 82.032-64.401 104.947-82.653V400z\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":36},"\u003Cpath fill=\"currentColor\" d=\"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041s64.04 28.673 64.04 64.041m175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018c111.832 7.284 201.473 96.702 208.772 208.772c.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79m144.249.288C439.596 229.677 251.465 40.445 16.503 32.01C7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999c191.179 7.839 344.627 161.316 352.465 352.465c.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504\"\u002F>",{"title":38,"posts":39},".NET",[40,48,55,62,68,74,81,87,94,100,107,113,119,125,132,139,145,151,157,163,169,175,181,187,193,199,205,211,217,224,231,237,244,251,257,263,269,276,282,288,295,301,307,313,319,325,333,339,345,351,357,363,369,375,381,387],{"id":41,"title":42,"date":43,"dateModified":44,"timeToRead":45,"description":46,"permalink":47},"posts\u002Fposts\u002F2022\u002Foptimally-configuring-open-telemetry-for-asp-net-core\u002Findex.md","Optimally Configuring Open Telemetry Tracing for ASP.NET Core","2022-02-03T00:00:00+00:00",null,4,"How to optimally configure Open Telemetry traces for ASP.NET Core enriched with lots of extra information.","\u002Foptimally-configuring-open-telemetry-tracing-for-asp-net-core\u002F",{"id":49,"title":50,"date":51,"dateModified":44,"timeToRead":52,"description":53,"permalink":54},"posts\u002Fposts\u002F2021\u002Fthe-problem-with-csharp-10-implicit-usings\u002Findex.md","The Problem with C# 10 Implicit Usings","2021-10-13T09:24:00+00:00",3,"I tried using C# 10 implicit using statements and found that they had a fatal flaw which meant you couldn't use them under certain circumstances","\u002Fthe-problem-with-csharp-10-implicit-usings\u002F",{"id":56,"title":57,"date":58,"dateModified":44,"timeToRead":59,"description":60,"permalink":61},"posts\u002Fposts\u002F2021\u002Fdotnet-boxed-visual-studio-integration\u002Findex.md",".NET Boxed Visual Studio Integration","2021-05-27T11:00:00+00:00",1,"You can now create .NET Boxed projects directly from Visual Studio. Here's a short post showing you how.","\u002Fdotnet-boxed-visual-studio-integration\u002F",{"id":63,"title":64,"date":65,"dateModified":44,"timeToRead":52,"description":66,"permalink":67},"posts\u002Fposts\u002F2021\u002Fexporting-open-telemetry-data-to-jaeger\u002Findex.md","Exporting Open Telemetry Data to Jaeger","2021-02-11T00:00:00+00:00","How to optimally export Open Telemetry metrics, logs, and traces for .NET to Jaeger.","\u002Fexporting-open-telemetry-data-to-jaeger\u002F",{"id":69,"title":70,"date":71,"dateModified":44,"timeToRead":52,"description":72,"permalink":73},"posts\u002Fposts\u002F2021\u002Fopen-telemetry-for-asp-net-core\u002Findex.md","Open Telemetry for ASP.NET Core","2021-02-01T00:00:00+00:00","The basics of how to configure Open Telemetry metrics, logs, and traces for ASP.NET Core and export the traces.","\u002Fopen-telemetry-for-asp-net-core\u002F",{"id":75,"title":76,"date":77,"dateModified":44,"timeToRead":78,"description":79,"permalink":80},"posts\u002Fposts\u002F2021\u002Fopen-telemetry-for-net\u002Findex.md","Deep Dive into Open Telemetry for .NET","2021-01-19T00:00:00+00:00",10,"How to use the Open Telemetry specification, tools and SDK's used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) using .NET and ASP.NET.","\u002Fdeep-dive-into-open-telemetry-for-net\u002F",{"id":82,"title":83,"date":84,"dateModified":44,"timeToRead":52,"description":85,"permalink":86},"posts\u002Fposts\u002F2020\u002Fautomating-dotnet-security-updates\u002Findex.md","Automating .NET Security Updates","2020-09-23T15:35:00+00:00",".NET SDK updates are released every few weeks. In this post, I talk about how you can automate them.","\u002Fautomating-dotnet-security-updates\u002F",{"id":88,"title":89,"date":90,"dateModified":44,"timeToRead":91,"description":92,"permalink":93},"posts\u002Fposts\u002F2020\u002Fthe-easiest-way-to-version-nuget-packages\u002Findex.md","The Easiest Way to Version NuGet Packages","2020-07-01T16:36:29+00:00",5,"Using MinVer is the easiest way to version your NuGet packages and DLL's using semantic versioning (SemVer).","\u002Fthe-easiest-way-to-version-nuget-packages\u002F",{"id":95,"title":96,"date":97,"dateModified":44,"timeToRead":52,"description":98,"permalink":99},"posts\u002Fposts\u002F2019\u002Funit-testing-dotnet-new-templates\u002Findex.md","Unit Testing dotnet new Templates","2019-08-21T00:00:00+00:00","It's difficult to know if your 'dotnet new' based project will work if they have lots of options, in this post I show how to unit test them.","\u002Funit-testing-dotnet-new-templates\u002F",{"id":101,"title":102,"date":103,"dateModified":44,"timeToRead":104,"description":105,"permalink":106},"posts\u002Fposts\u002F2018\u002Fthe-dotnet-watch-tool-revisited\u002Findex.md","The Dotnet Watch Tool Revisited","2018-04-30T00:00:00+00:00",2,"The dotnet watch tool is a file watcher for dotnet that restarts the application when changes in the source code are detected. You can use dotnet watch in Visual Studio by using the launchSettings.json configuration file.","\u002Fthe-dotnet-watch-tool-revisited\u002F",{"id":108,"title":109,"date":110,"dateModified":44,"timeToRead":91,"description":111,"permalink":112},"posts\u002Fposts\u002F2017\u002Fasp-net-core-caching-in-practice\u002Findex.md","ASP.NET Core Caching in Practice","2017-10-20T00:00:00+00:00","How to use and implement Cache-Control, Cache-Control Immutable, E-Tag, Last-Modified and If-Modified-Since Caching HTTP headers in ASP.NET Core.","\u002Fasp-net-core-caching-in-practice\u002F",{"id":114,"title":115,"date":116,"dateModified":44,"timeToRead":104,"description":117,"permalink":118},"posts\u002Fposts\u002F2017\u002Fstructured-data-using-schema-net\u002Findex.md","Structured Data using Schema.NET","2017-07-02T00:00:00+00:00","Schema.NET is Schema.org objects turned into strongly typed C# POCO classes for use in .NET.","\u002Fstructured-data-using-schema-net\u002F",{"id":120,"title":121,"date":122,"dateModified":44,"timeToRead":45,"description":123,"permalink":124},"posts\u002Fposts\u002F2017\u002Fasp-net-core-lazy-command-pattern\u002Findex.md","ASP.NET Core Lazy Command Pattern","2017-04-08T00:00:00+00:00","Move your ASP.NET Core MVC action method logic into lazily loaded commands using the command pattern, to reduce Controller complexity.","\u002Fasp-net-core-lazy-command-pattern\u002F",{"id":126,"title":127,"date":128,"dateModified":44,"timeToRead":129,"description":130,"permalink":131},"posts\u002Fposts\u002F2017\u002Fdotnet-new-feature-selection\u002Findex.md","dotnet new Feature Selection","2017-03-26T00:00:00+00:00",9,"How to add feature selection to your dotnet new template using symbols (bool, string, choice, computed) and pre-processor directives.","\u002Fdotnet-new-feature-selection\u002F",{"id":133,"title":134,"date":135,"dateModified":44,"timeToRead":136,"description":137,"permalink":138},"posts\u002Fposts\u002F2017\u002Fcleaning-up-csproj\u002Findex.md","Cleaning Up CSPROJ","2017-03-18T00:00:00+00:00",7,"I show how to make the new Visual Studio 2017 .NET Core based csproj XML concise and pretty for hand editing.","\u002Fcleaning-up-csproj\u002F",{"id":140,"title":141,"date":142,"dateModified":44,"timeToRead":45,"description":143,"permalink":144},"posts\u002Fposts\u002F2017\u002Fcustom-project-templates-using-dotnet-new\u002Findex.md","Custom Project Templates Using dotnet new","2017-01-18T00:00:00+00:00","How to create project templates using dotnet new and the template.json file. How to share project templates by creating NuGet packages.","\u002Fcustom-project-templates-using-dotnet-new\u002F",{"id":146,"title":147,"date":148,"dateModified":44,"timeToRead":59,"description":149,"permalink":150},"posts\u002Fposts\u002F2017\u002Freactive-extensions-rx-part-8-timeouts\u002Findex.md","Reactive Extensions (Rx) - Part 8 - Timeouts","2017-01-02T00:00:00+00:00","Should you use Reactive Extensions (Rx) to do timeouts in .NET? It turns out it's better to use CancellationTokenSource in the Task Parallel Library (TPL).","\u002Freactive-extensions-rx-part-8-timeouts\u002F",{"id":152,"title":153,"date":154,"dateModified":44,"timeToRead":136,"description":155,"permalink":156},"posts\u002Fposts\u002F2016\u002Fseo-friendly-urls-asp-net-core\u002Findex.md","SEO Friendly URL's for ASP.NET Core","2016-12-17T00:00:00+00:00","An SEO friendly URL is human readable and gives your site a higher page rank. Learn how to implement SEO friendly URL's using ASP.NET Core.","\u002Fseo-friendly-urls-asp-net-core\u002F",{"id":158,"title":159,"date":160,"dateModified":44,"timeToRead":45,"description":161,"permalink":162},"posts\u002Fposts\u002F2016\u002Fmaking-application-insights-fast-and-secure\u002Findex.md","Making Application Insights Fast & Secure","2016-12-11T00:00:00+00:00","Implementing Application Insights into your ASP.NET Core application with performance and security as a top priority in this advanced scenario.","\u002Fmaking-application-insights-fast-and-secure\u002F",{"id":164,"title":165,"date":166,"dateModified":44,"timeToRead":104,"description":167,"permalink":168},"posts\u002Fposts\u002F2016\u002Fthe-dotnet-watch-tool\u002Findex.md","The Dotnet Watch Tool","2016-09-10T00:00:00+00:00","The dotnet watch tool is a file watcher for dotnet that restarts the application when changes in the source code are detected.","\u002Fthe-dotnet-watch-tool\u002F",{"id":170,"title":171,"date":172,"dateModified":44,"timeToRead":91,"description":173,"permalink":174},"posts\u002Fposts\u002F2016\u002Fsocial-taghelpers-for-asp-net-core\u002Findex.md","Social TagHelpers for ASP.NET Core","2016-03-19T00:00:00+00:00","Enhance the experience of sharing a page from your site through the use of social media meta tags implemented with ASP.NET Core TagHelpers.","\u002Fsocial-taghelpers-for-asp-net-core\u002F",{"id":176,"title":177,"date":178,"dateModified":44,"timeToRead":45,"description":179,"permalink":180},"posts\u002Fposts\u002F2016\u002Fsubresource-integrity-taghelper-using-asp-net-core-part-2\u002Findex.md","Subresource Integrity TagHelper Using ASP.NET Core - Part 2","2016-03-12T00:00:00+00:00","Use an ASP.NET Core TagHelper to implement Subresource Integrity (SRI) to ensure that external resources have not been tampered with. With is part 2.","\u002Fsubresource-integrity-taghelper-using-asp-net-core-part-2\u002F",{"id":182,"title":183,"date":184,"dateModified":44,"timeToRead":52,"description":185,"permalink":186},"posts\u002Fposts\u002F2016\u002Fsubresource-integrity-taghelper-using-asp-net-core\u002Findex.md","Subresource Integrity TagHelper Using ASP.NET Core - Part 1","2016-03-06T00:00:00+00:00","Use an ASP.NET Core TagHelper to implement Subresource Integrity (SRI) to ensure that external resources have not been tampered with.","\u002Fsubresource-integrity-taghelper-using-asp-net-core\u002F",{"id":188,"title":189,"date":190,"dateModified":44,"timeToRead":104,"description":191,"permalink":192},"posts\u002Fposts\u002F2016\u002Fcolorful-console\u002Findex.md","Colorful.Console","2016-02-14T00:00:00+00:00","Colorful.Console is a C# library that wraps around the System.Console class, making your console apps more colourful. Write ASCII art using Figlet fonts.","\u002Fcolorful-console\u002F",{"id":194,"title":195,"date":196,"dateModified":44,"timeToRead":52,"description":197,"permalink":198},"posts\u002Fposts\u002F2016\u002Flogging-with-serilog-exceptions\u002Findex.md","Logging with Serilog.Exceptions","2016-01-31T00:00:00+00:00","Log exception details and custom properties that are not output in Exception.ToString() using Serilog.Exceptions for .NET.","\u002Flogging-with-serilog-exceptions\u002F",{"id":200,"title":201,"date":202,"dateModified":44,"timeToRead":136,"description":203,"permalink":204},"posts\u002Fposts\u002F2015\u002Fdynamically-generating-sitemap-xml-for-asp-net-mvc\u002Findex.md","Dynamically Generating Sitemap.xml for ASP.NET MVC","2015-09-15T00:00:00+00:00","How to dynamically generate a sitemap.xml file using ASP.NET MVC to improve the Search Engine Optimization (SEO) of your site and get better search rankings.","\u002Fdynamically-generating-sitemap-xml-for-asp-net-mvc\u002F",{"id":206,"title":207,"date":208,"dateModified":44,"timeToRead":104,"description":209,"permalink":210},"posts\u002Fposts\u002F2015\u002Fwhats-new-in-asp-net-5-mvc-6-boilerplate\u002Findex.md","Whats New in ASP.NET Core Boilerplate","2015-08-23T00:00:00+00:00","With the release of ASP.NET Core Boilerplate, this post discusses what's new and what is currently missing due to ASP.NET Core still being in beta.","\u002Fwhats-new-in-asp-net-5-mvc-6-boilerplate\u002F",{"id":212,"title":213,"date":214,"dateModified":44,"timeToRead":45,"description":215,"permalink":216},"posts\u002Fposts\u002F2015\u002Fdynamically-generating-robots-txt-using-asp-net-mvc\u002Findex.md","Dynamically Generating Robots.txt Using ASP.NET MVC","2015-07-31T00:00:00+00:00","How to dynamically generate a robots.txt file using a simple ASP.NET MVC action method and only a few lines of code.","\u002Fdynamically-generating-robots-txt-using-asp-net-mvc\u002F",{"id":218,"title":219,"date":220,"dateModified":44,"timeToRead":221,"description":222,"permalink":223},"posts\u002Fposts\u002F2015\u002Fcanonical-urls-for-asp-net-mvc\u002Findex.md","Canonical URL's for ASP.NET MVC","2015-07-14T00:00:00+00:00",11,"Use canonical URL's in ASP.NET MVC for better Search Engine Optimization (SEO) using ASP.NET Core Boilerplate and the RedirectToCanonicalUrlAttribute.","\u002Fcanonical-urls-for-asp-net-mvc\u002F",{"id":225,"title":226,"date":227,"dateModified":44,"timeToRead":228,"description":229,"permalink":230},"posts\u002Fposts\u002F2015\u002Fbuilding-rssatom-feeds-for-asp-net-mvc\u002Findex.md","Building RSS\u002FAtom Feeds for ASP.NET MVC","2015-06-26T00:00:00+00:00",19,"How to build a fully featured RSS\u002FAtom feed for ASP.NET MVC, including Google's PubSubHubbub and the 'Subscribe to this feed' button.","\u002Fbuilding-rssatom-feeds-for-asp-net-mvc\u002F",{"id":232,"title":233,"date":234,"dateModified":44,"timeToRead":91,"description":235,"permalink":236},"posts\u002Fposts\u002F2015\u002Fc-6-0-saving-developers-from-themselves\u002Findex.md","C# 6.0 - Saving Developers From Themselves","2015-05-10T00:00:00+00:00","C# 6.0 helps reduce human error and save developers from themselves using the nameof operator, string interpolation and the null-conditional operator.","\u002Fc-6-0-saving-developers-from-themselves\u002F",{"id":238,"title":239,"date":240,"dateModified":44,"timeToRead":241,"description":242,"permalink":243},"posts\u002Fposts\u002F2015\u002Fcontent-security-policy-for-asp-net-mvc\u002Findex.md","Content Security Policy (CSP) for ASP.NET MVC","2015-03-17T00:00:00+00:00",22,"Content Security Policy (CSP) is a HTTP header which white-lists content the browser is allowed to load. This post discusses its application in ASP.NET MVC.","\u002Fcontent-security-policy-for-asp-net-mvc\u002F",{"id":245,"title":246,"date":247,"dateModified":44,"timeToRead":248,"description":249,"permalink":250},"posts\u002Fposts\u002F2015\u002Fnwebsec-asp-net-mvc-security-through-http-headers\u002Findex.md","NWebSec ASP.NET MVC Security Through HTTP Headers","2015-02-05T00:00:00+00:00",6,"The NWebSec NuGet packages help secure your ASP.NET MVC site using HTTP headers. The ASP.NET Core Boilerplate project template configures them our of the box.","\u002Fnwebsec-asp-net-mvc-security-through-http-headers\u002F",{"id":252,"title":253,"date":254,"dateModified":44,"timeToRead":104,"description":255,"permalink":256},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part7-sample-events\u002Findex.md","Reactive Extensions (Rx) - Part 7 - Sample Events","2014-12-24T00:00:00+00:00","Shows how to use the Reactive Extensions (Rx) Sample method to reduce the number of subscribed events by taking a sample from them over a given time period.","\u002Freactive-extensions-part7-sample-events\u002F",{"id":258,"title":259,"date":260,"dateModified":44,"timeToRead":221,"description":261,"permalink":262},"posts\u002Fposts\u002F2014\u002Fsecuring-the-aspnet-mvc-web-config\u002Findex.md","Securing the ASP.NET MVC Web.config","2014-12-17T00:00:00+00:00","The web.config file is insecure in the default ASP.NET MVC project template. This post talks you through securing the ASP.NET MVC Web.config file.","\u002Fsecuring-the-aspnet-mvc-web-config\u002F",{"id":264,"title":265,"date":266,"dateModified":44,"timeToRead":136,"description":267,"permalink":268},"posts\u002Fposts\u002F2014\u002Fcustom-visual-studio-project-templates\u002Findex.md","Custom Visual Studio Project Templates","2014-12-10T00:00:00+00:00","A guide to creating custom Visual Studio project templates in .zip and VSIX form and submitting them to the Visual Studio Gallery, so it can be downloaded.","\u002Fcustom-visual-studio-project-templates\u002F",{"id":270,"title":271,"date":272,"dateModified":44,"timeToRead":273,"description":274,"permalink":275},"posts\u002Fposts\u002F2014\u002Finternet-favicon-madness\u002Findex.md","Internet Favicon Madness (Updated)","2014-11-24T00:00:00+00:00",17,"Add favicon's to your website to support iOS, Android, Windows 7, Windows 8, Windows Phone and more. Find out where icons are used on each platform and how.","\u002Finternet-favicon-madness\u002F",{"id":277,"title":278,"date":279,"dateModified":44,"timeToRead":136,"description":280,"permalink":281},"posts\u002Fposts\u002F2014\u002Fasp-net-mvc-boilerplate\u002Findex.md","ASP.NET Core Boilerplate","2014-11-12T00:00:00+00:00","ASP.NET Core Boilerplate is a professional ASP.NET MVC template for building secure, fast, robust and adaptable web applications or sites.","\u002Fasp-net-mvc-boilerplate\u002F",{"id":283,"title":284,"date":285,"dateModified":44,"timeToRead":45,"description":286,"permalink":287},"posts\u002Fposts\u002F2014\u002Felysium-extra-1-1-released\u002Findex.md","Elysium Extra 1.1 Released","2014-11-05T00:00:00+00:00","Elysium Extra Version 1.1 is a Windows Presentation Foundation (WPF) SDK providing Metro styles for built in WPF controls and some custom controls.","\u002Felysium-extra-1-1-released\u002F",{"id":289,"title":290,"date":291,"dateModified":44,"timeToRead":292,"description":293,"permalink":294},"posts\u002Fposts\u002F2014\u002Fmodel-view-viewmodel-mvvm-part4-inotifydataerrorinfo\u002Findex.md","Model-View-ViewModel (MVVM) - Part 4 - INotifyDataErrorInfo","2014-09-09T00:00:00+00:00",12,"An base class implementation for the INotifyDataErrorInfo interface. Used in the Model-View-ViewModel (MVVM) pattern. Targeted for best performance.","\u002Fmodel-view-viewmodel-mvvm-part4-inotifydataerrorinfo\u002F",{"id":296,"title":297,"date":298,"dateModified":44,"timeToRead":221,"description":299,"permalink":300},"posts\u002Fposts\u002F2014\u002Fmodel-view-viewmodel-mvvm-part3-inotifypropertychanged\u002Findex.md","Model-View-ViewModel (MVVM) - Part 3 - INotifyPropertyChanged","2014-06-18T00:00:00+00:00","An base class implementation for the INotifyPropertyChanged interface. Used in the Model-View-ViewModel (MVVM) pattern. Targeted for best performance.","\u002Fmodel-view-viewmodel-mvvm-part3-inotifypropertychanged\u002F",{"id":302,"title":303,"date":304,"dateModified":44,"timeToRead":45,"description":305,"permalink":306},"posts\u002Fposts\u002F2014\u002Fmodel-view-viewmodel-mvvm-part2-idisposable\u002Findex.md","Model-View-ViewModel (MVVM) - Part 2 - IDisposable","2014-06-13T00:00:00+00:00","Implementing IDisposable correctly is ridiculously hard. A Disposable base class can make it easier. Using IDisposable in Model-View-ViewModel (MVVM) really helps.","\u002Fmodel-view-viewmodel-mvvm-part2-idisposable\u002F",{"id":308,"title":309,"date":310,"dateModified":44,"timeToRead":91,"description":311,"permalink":312},"posts\u002Fposts\u002F2014\u002Fmodel-view-viewmodel-mvvm-part1-overview\u002Findex.md","Model-View-ViewModel (MVVM) - Part 1 - Overview","2014-05-14T00:00:00+00:00","What really goes into using Model-View-ViewModel (MVVM) in .NET. Base classes for INotifyPropertyChanged, INotifyDataErrorInfo, IDisposable and a lot more.","\u002Fmodel-view-viewmodel-mvvm-part1-overview\u002F",{"id":314,"title":315,"date":316,"dateModified":44,"timeToRead":59,"description":317,"permalink":318},"posts\u002Fposts\u002F2014\u002Fportable-class-library-version-of-notificationsextensions-nuget-package\u002Findex.md","Portable Class Library (PCL) version of NotificationsExtensions NuGet package","2014-05-06T00:00:00+00:00","NotificationsExtensions.Portable is a Portable Class Library (PCL) used to Create Windows 8.1 or Windows Phone 8.1 Tile, Toast and Badge Notification XML.","\u002Fportable-class-library-version-of-notificationsextensions-nuget-package\u002F",{"id":320,"title":321,"date":322,"dateModified":44,"timeToRead":91,"description":323,"permalink":324},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part6-task-toobservable\u002Findex.md","Reactive Extensions (Rx) - Part 6 - Task ToObservable","2014-04-25T00:00:00+00:00","How and where to use the Reactive Extensions (Rx) ToObservable Extension method to turn a Task Parallel Library (TPL) Task into an IObservable.","\u002Freactive-extensions-part6-task-toobservable\u002F",{"id":326,"title":327,"date":328,"dateModified":329,"timeToRead":330,"description":331,"permalink":332},"posts\u002Fposts\u002F2014\u002Fgethashcode-made-easy\u002Findex.md","GetHashCode Made Easy","2014-04-14T00:00:00+00:00","2019-06-12T00:00:00+00:00",8,"Implementing GetHashCode is hard work and little understood. Learn how to implement GetHashCode as quickly and as simply as possible.","\u002Fgethashcode-made-easy\u002F",{"id":334,"title":335,"date":336,"dateModified":44,"timeToRead":45,"description":337,"permalink":338},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part5-awaiting-observables\u002Findex.md","Reactive Extensions (Rx) - Part 5 - Awaiting Observables","2014-03-27T00:00:00+00:00","How and where to use Task Parallel Library (TPL) async and await with Reactive Extensions (Rx). Also, how to use TPL for awaiting observables.","\u002Freactive-extensions-part5-awaiting-observables\u002F",{"id":340,"title":341,"date":342,"dateModified":44,"timeToRead":330,"description":343,"permalink":344},"posts\u002Fposts\u002F2014\u002Fwpf-metro-part4-elysium-extra\u002Findex.md","WPF Metro Part 4 - Elysium Extra","2014-03-19T00:00:00+00:00","Elysium Extra is an excellent Windows Presentation Foundation (WPF) SDK providing Metro styles for built in WPF controls and some custom controls.","\u002Fwpf-metro-part4-elysium-extra\u002F",{"id":346,"title":347,"date":348,"dateModified":44,"timeToRead":104,"description":349,"permalink":350},"posts\u002Fposts\u002F2014\u002Fwpf-metro-part3-elysium\u002Findex.md","WPF Metro Part 3 - Elysium","2014-03-17T00:00:00+00:00","Elysium is an excellent Windows Presentation Foundation (WPF) SDK (On CodePlex) providing Metro styles for built in WPF controls and some custom controls.","\u002Fwpf-metro-part3-elysium\u002F",{"id":352,"title":353,"date":354,"dateModified":44,"timeToRead":52,"description":355,"permalink":356},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part4-replacing-timers\u002Findex.md","Reactive Extensions (Rx) - Part 4 - Replacing Timers","2014-03-11T00:00:00+00:00","You should definitely consider using Reactive Extensions (Rx) is as a direct replacement for .NET Timers. This post will explain how.","\u002Freactive-extensions-part4-replacing-timers\u002F",{"id":358,"title":359,"date":360,"dateModified":44,"timeToRead":52,"description":361,"permalink":362},"posts\u002Fposts\u002F2014\u002Fwpf-metro-part2-mahapps-metro\u002Findex.md","WPF Metro Part 2 - MahApps Metro","2014-03-02T00:00:00+00:00","MahApps Metro is an excellent Windows Presentation Foundation (WPF) SDK providing Metro styles for built in WPF controls and several custom controls.","\u002Fwpf-metro-part2-mahapps-metro\u002F",{"id":364,"title":365,"date":366,"dateModified":44,"timeToRead":52,"description":367,"permalink":368},"posts\u002Fposts\u002F2014\u002Fwpf-metro-part1-modern-ui-for-wpf\u002Findex.md","WPF Metro Part 1 - Modern UI for WPF","2014-02-19T00:00:00+00:00","Modern UI for WPF is an excellent Windows Presentation Foundation (WPF) SDK providing Metro styles for built in WPF controls and several custom controls.","\u002Fwpf-metro-part1-modern-ui-for-wpf\u002F",{"id":370,"title":371,"date":372,"dateModified":44,"timeToRead":104,"description":373,"permalink":374},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part3-naming-conventions\u002Findex.md","Reactive Extensions (Rx) - Part 3 - Naming Conventions","2014-02-14T00:00:00+00:00","Reactive Extensions (Rx) Advantages of using IObservable property naming conventions and comparison between C# events.","\u002Freactive-extensions-part3-naming-conventions\u002F",{"id":376,"title":377,"date":378,"dateModified":44,"timeToRead":52,"description":379,"permalink":380},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part2-wrapping-events\u002Findex.md","Reactive Extensions (Rx) - Part 2 - Wrapping C# Events","2014-02-13T00:00:00+00:00","Reactive Extensions IObservable wrappers for C# events and hiding the C# events entirely from subscribers using explicit interface implementations.","\u002Freactive-extensions-part2-wrapping-events\u002F",{"id":382,"title":383,"date":384,"dateModified":44,"timeToRead":45,"description":385,"permalink":386},"posts\u002Fposts\u002F2014\u002Freactive-extensions-part1-replacing-events\u002Findex.md","Reactive Extensions (Rx) - Part 1 - Replacing C# Events","2014-02-11T00:00:00+00:00","You should definitely consider using Reactive Extensions (Rx) is as a direct replacement for C# events. This post will explain how.","\u002Freactive-extensions-part1-replacing-events\u002F",{"id":388,"title":389,"date":390,"dateModified":44,"timeToRead":104,"description":391,"permalink":392},"posts\u002Fposts\u002F2014\u002Fconfigureawait-task-parallel-library\u002Findex.md","ConfigureAwait in Task Parallel Library (TPL)","2014-02-07T00:00:00+00:00","The importance of using ConfigureAwait when using the Task Parallel Library (TPL) to improve performance and reduce context switching.","\u002Fconfigureawait-task-parallel-library\u002F",1794232716857]