The .NET News Daily Issue #7

Feel like sharing?

:root {–wt-primary-color: #030712;–wt-text-on-primary-color: #F9FAFB;–wt-secondary-color: #F9FAFB;–wt-text-on-secondary-color: #030712;–wt-tertiary-color: #FFFFFF;–wt-text-on-tertiary-color: #222222;–wt-background-color: #F9FAFB;–wt-text-on-background-color: #030712;–wt-subscribe-background-color: #FFFFFF;–wt-text-on-subscribe-background-color: #030712;–wt-header-font: “Poppins”, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto,”Helvetica Neue”, Arial, “Noto Sans”, sans-serif, “Apple Color Emoji”, “Segoe UI Emoji”, “Segoe UI Symbol”, “Noto Color Emoji”;–wt-body-font: “Poppins”, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, “Helvetica Neue”, Arial, “Noto Sans”, sans-serif, “Apple Color Emoji”, “Segoe UI Emoji”, “Segoe UI Symbol”, “Noto Color Emoji”;–wt-button-font: “Poppins”, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, “Helvetica Neue”, Arial, “Noto Sans”, sans-serif, “Apple Color Emoji”, “Segoe UI Emoji”, “Segoe UI Symbol”, “Noto Color Emoji”;–wt-border-radius: 8px}.bg-wt-primary { background-color: var(–wt-primary-color); }.text-wt-primary { color: var(–wt-primary-color); }.border-wt-primary { border-color: var(–wt-primary-color); }.bg-wt-text-on-primary { background-color: var(–wt-text-on-primary-color); }.text-wt-text-on-primary { color: var(–wt-text-on-primary-color); }.border-wt-text-on-primary { border-color: var(–wt-text-on-primary-color); }.bg-wt-secondary { background-color: var(–wt-secondary-color); }.text-wt-secondary { color: var(–wt-secondary-color); }.border-wt-secondary { border-color: var(–wt-secondary-color); }.bg-wt-text-on-secondary { background-color: var(–wt-text-on-secondary-color); }.text-wt-text-on-secondary { color: var(–wt-text-on-secondary-color); }.border-wt-text-on-secondary { border-color: var(–wt-text-on-secondary-color); }.bg-wt-tertiary { background-color: var(–wt-tertiary-color); }.text-wt-tertiary { color: var(–wt-tertiary-color); }.border-wt-tertiary { border-color: var(–wt-tertiary-color); }.bg-wt-text-on-tertiary { background-color: var(–wt-text-on-tertiary-color); }.text-wt-text-on-tertiary { color: var(–wt-text-on-tertiary-color); }.border-wt-text-on-tertiary { border-color: var(–wt-text-on-tertiary-color); }.bg-wt-background { background-color: var(–wt-background-color); }.text-wt-background { color: var(–wt-background-color); }.border-wt-background { border-color: var(–wt-background-color); }.bg-wt-text-on-background { background-color: var(–wt-text-on-background-color); }.text-wt-text-on-background { color: var(–wt-text-on-background-color); }.border-wt-text-on-background { border-color: var(–wt-text-on-background-color); }.bg-wt-subscribe-background { background-color: var(–wt-subscribe-background-color); }.text-wt-subscribe-background { color: var(–wt-subscribe-background-color); }.border-wt-subscribe-background { border-color: var(–wt-subscribe-background-color); }.bg-wt-text-on-subscribe-background { background-color: var(–wt-text-on-subscribe-background-color); }.text-wt-text-on-subscribe-background { color: var(–wt-text-on-subscribe-background-color); }.border-wt-text-on-subscribe-background { border-color: var(–wt-text-on-subscribe-background-color); }.rounded-wt { border-radius: var(–wt-border-radius); }.wt-header-font { font-family: var(–wt-header-font); }.wt-body-font { font-family: var(–wt-body-font); }.wt-button-font { font-family: var(–wt-button-font); }input:focus { –tw-ring-color: transparent !important; }li a { word-break: break-word; }@media only screen and (max-width:667px) {.mob-stack {display: block !important;width: 100% !important;}.mob-w-full {width: 100% !important;}}@font-face {font-family: ‘Roboto’;font-style: normal;font-weight: 400;src: url(‘https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2’) format(‘woff2’);}@font-face {font-family: ‘Roboto’;font-style: normal;font-weight: 700;src: url(‘https://fonts.gstatic.com/s/roboto/v29/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2’) format(‘woff2’);}@font-face {font-family: ‘Roboto’;font-style: italic;font-weight: 400;src: url(‘https://fonts.gstatic.com/s/roboto/v29/KFOkCnqEu92Fr1Mu51xIIzIXKMny.woff2’) format(‘woff2’);}@font-face {font-family: ‘Roboto’;font-style: italic;font-weight: 700;src: url(‘https://fonts.gstatic.com/s/roboto/v29/KFOjCnqEu92Fr1Mu51TzBic6CsTYl4BO.woff2’) format(‘woff2’);}@font-face {font-family: ‘Open Sans’;font-style: normal;font-weight: 400;src: url(‘https://fonts.gstatic.com/s/opensans/v28/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2’) format(‘woff2’);}@font-face {font-family: ‘Open Sans’;font-style: normal;font-weight: 700;src: url(‘https://fonts.gstatic.com/s/opensans/v28/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2’) format(‘woff2’);}@font-face {font-family: ‘Open Sans’;font-style: italic;font-weight: 400;src: url(‘https://fonts.gstatic.com/s/opensans/v28/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6FxZCJgg.woff2’) format(‘woff2’);}@font-face {font-family: ‘Open Sans’;font-style: italic;font-weight: 700;src: url(‘https://fonts.gstatic.com/s/opensans/v28/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6FxZCJgg.woff2’) format(‘woff2′);}.table-base, .table-c, .table-h { border: 1px solid #C0C0C0; }.table-c { padding:5px; background-color:#FFFFFF; }.table-c p { color: #2D2D2D; font-family:’Open Sans’,’Segoe UI’,’Apple SD Gothic Neo’,’Lucida Grande’,’Lucida Sans Unicode’,sans-serif !important; overflow-wrap: break-word; }.table-h { padding:5px; background-color:#F1F1F1; }.table-h p { color: #2A2A2A; font-family:’Open Sans’,’Segoe UI’,’Apple SD Gothic Neo’,’Lucida Grande’,’Lucida Sans Unicode’,sans-serif !important; overflow-wrap: break-word; }
.bh__byline_wrapper {font-size: .875rem;line-height: 1.25rem;vertical-align: middle;justify-content: space-between;display: block;}.bh__byline_social_wrapper {display: flex;margin-top: 0.5rem;align-items: center;}.bh__byline_social_wrapper > * + * {margin-left: 1rem;}@media (min-width: 768px) {.bh__byline_wrapper {display: flex;}.bh__byline_social_wrapper {margin-top: 0rem;}}
p span[style*=”font-size”] { line-height: 1.6; }

Happy Monday everyone! Anyone working on side projects over the weekend?

p span[style*=”font-size”] { line-height: 1.6; }

Starting out our second week of awesome .NET articles. My list of sources is filling up with more being added every day. I’m also rebuilding the https://dotnetnews.co site to actually publish the newsletter daily. There’s a bunch of RSS handshaking 🤝 going on here..

p span[style*=”font-size”] { line-height: 1.6; }

As I said all last week, please throw any suggestions my way on how I can make this better or tell me what you would like to see more of.

Table of Contents

Developer of The Week

p span[style*=”font-size”] { line-height: 1.6; }

Dave Callan | dotnet

p span[style*=”font-size”] { line-height: 1.6; }

p span[style*=”font-size”] { line-height: 1.6; }

Microsoft MVP | .NET Developer & tech lead from Ireland! Talks about Azure, #csharp, Entity Framework, #dotnet and Visual Studio.

.NET Library of The Week

p span[style*=”font-size”] { line-height: 1.6; }

I’m keeping this library here for another week. Our list of subscribers isn’t anywhere to scale yet and I still love this library.

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

Today’s Articles

p span[style*=”font-size”] { line-height: 1.6; }

📰 So you want to play traffic cop with HTTP requests in ASP.NET Core huh:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 So you’re telling me everyone wants this elusive Full-Stack wizard with barely any experience:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Trying to wrap your head around the Liskov Substitution Principle is like trying to untangle headphone wires with C#:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Step up your data structure game and get cozy with the Hashtable probably the OG of key-value pairs:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 If you love .NET 9 and AI productivity just wait till you see what Visual Studio 17.12 has in store:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Brace yourself for this one C# pros sharing code with Service Classes will make you question your life choices:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 If you are tired of manually building your nuget packages then GitHub Actions might be your new best friend:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Who needs a local server when you have NGrok turning your localhost into a public playground for webhooks:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Get ready for three days of free virtual developer bliss at .NET Conf 2024 long live .NET 9:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Ever wondered how to fit your life into a struct heres a riveting tale of coordinates in C#:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Time to switch things up and learn ASP.NET Core API CRUD with Postgres instead of the usual Microsoft suspects:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 If you’re new to ASP.NET Core Web this is the guide that’s smoother than my morning coffee:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Get ready to move your .NET apps to Azure cloud without pulling your hair out:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

p span[style*=”font-size”] { line-height: 1.6; }

📰 Ready to impress your friends with your new mastery of ReadOnlySpan.Split in .NET 9:

.generic-embed–root {padding: 10px 19px 10px 19px;}.generic-embed–root:hover {filter: brightness(90%)}.generic-embed–root a {text-decoration: none !important;}.generic-embed {background-color: #FFFFFF;border-radius: 10px;border: solid 2px #F1F1F1;}.generic-embed–wrapper-reverse {min-height: 75px;border-collapse: collapse;width: 100%;display: flex;}.generic-embed–title {color: #2D2D2D;font-size: 15px;font-weight: bold;padding-bottom: 8px;}.generic-embed–description {color: #2D2D2D;font-size: 15px;padding-bottom: 8px;}.generic-embed–link {color: #3a9bf3;font-size: 12px;word-break: break-word;}@media only screen and (max-width: 640px) {.generic-embed–image {width: 100% !important;padding: 0px 0px 12px 0px !important;}.generic-embed–wrapper-reverse {flex-direction: column-reverse;}}

Subscribe to the .NET Newsletter and never miss another awesome article.

Leave a Reply

Your email address will not be published. Required fields are marked *