Wilson Mar bio photo

Wilson Mar

Hello!

Email me Calendar Skype call

LinkedIn Twitter Gitter Instagram Youtube

Github Stackoverflow Pinterest

Buy Visual Studio to code C# Azure Functions and cross-platform ASP.NET apps within the Microsoft ecosystem

US (English)   Español (Spanish)   Français (French)   Deutsch (German)   Italiano   Português   Estonian   اَلْعَرَبِيَّةُ (Egypt Arabic)   中文 (简体) Chinese (Simplified)   日本語 Japanese   한국어 Korean

Overview

The unique contribution of this article is to provide a deep yet concise approach, done by using automation which are then explained, so you create with less manual copy/paste and typing. Thus, quicker with less mistakes. All in one page for easy search.

NOTE: Content here are my personal opinions, and not intended to represent any employer (past or present). “PROTIP:” here highlight information I haven’t seen elsewhere on the internet because it is hard-won, little-know but significant facts based on my personal research and experience.

Build a complete stack now

Anyone with an Azure account and internet access can create a production-worthy, scalable and resilient enterprise stack, thanks to Infrastructure as Code (HashiCorp Terraform templates) and other automation.

Let’s first install so concepts can be shown practically.


All the pieces

Job descriptions for a “Microsoft full stack developer” mention dozens of technologies. Here is the order to make sense of them:

  1. .NET is the ecosystem Microsoft built (beginning in 2002) around an architecture similar to Java, where
  2. CIL (Microsoft Intermediate Language, aka “bytecode”) is created from compiling source code written in various human-readable programming languages (C#, Visual Basic). MSIL is read by Microsoft’s proprietary
  3. CLR (Common Language Runtime), which is equivalent to the JVM (Java Virtual Machine) that turn bytecode into native code executed by specific computer processors (x86, ARM, etc.).

    In theory, this is instead of distributing different executable files for different platforms and CPU types. However, …

  4. .NET Framework only ran on Windows servers.
  5. Work on the .NET Mono Framework was open-sourced outside Microsoft for mobile development, and adopted by the Unity game engine and Xamarin, which Microsoft bought in 2016.
  6. .NET 5 combines and thus replaces:
    • “.NET Framework” which only ran on Windows, now “feature complete”.
    • “.NET Core” which was rebuilt to be faster and cross-platform (on Linux, Mac, Windows) with modularity to provide flexible deployment. Last release December 3, 2019. .NET Core SDK (Software Development Kit) are libraries referenced by several programming languages
    • Xamarin/Mono

  7. .NET Standard (“netstandard”) library
  8. Nuget is the repository of .NET packages online (equivalent to NPM, Maven, PyPi, etc.)
  9. ASP.NET Core is for web development using the MVC (Model-View-Controller) programming pattern (equivalent to Node.Js)

  10. Visual Studio Code is the free text editor (with lots of add-ons)
  11. Visual Studio 2022 for Windows is the licen$ed editor with powerful debugging features (runs only on Windows machines)
  12. C# (C-sharp) is the programming language
  13. F# (F-sharp) is the functional programming language
  14. PowerShell CLI (equivalent to Bash Shell on Linux)

  15. .NET MAUI to build apps running on iPhone and Android mobile devices
  16. Razor provides templating in code (equivalent to handle bars)
  17. Blazor to build user interface components run in internet browsers WebAssembly for near-native performance [course]
  18. Silverlight deprecated?
  19. EF Core (Enterprise Framework)
  20. SignalR to code real-time RPC (Remote Procedure Calls) using HTTP/2 protocol
  21. Xamarin/Mono is .NET for mobile. It’s being replaced by .NET MAUI.
  22. UWP (Universal Windows Platform) is used to build desktop apps that run on Windows, Mac, and Linux
  23. gRPC in ASP.NET Core to develop contract-first, high-performance web services
  24. More granular than RBAC is ASP.NET Core Identity Roles, which supports CBAC (Claims-Based Access Control) enforced through Authorization Policy stored in the AspNetUserClaims table.*

  25. Dapr (Distributed Application Runtime) apps are cloud-native event-driven, portable runtimes that can run within Kubernetes on most clouds

  26. MS-SQL is the database from Microsoft that runs on many platforms.
  27. Azure Cosmos DB runs across regions in the Azure cloud
  28. LINQ is Microsoft’s proprietary extension to the SQL language for querying and manipulating data within relational (SQL) databases.
  29. EF (Enterprise Framework) Core enables object-to-data store mapping when programming reading and writing to relational data stores (such as SQLite and SQL Server).



Additionally, there are DevOps and “Backing” utilities created and managed by a platform team for developers to consume:

  • IAM for MFA and SSO
  • Secrets management (HashiCorp Vault)
  • Network management (Load Balancers, Gateways)
  • Git and GitHub
  • CI/CD
  • Code vulnerability scanners (SonarQube, etc.)

  • Log accumulation, visualization of trends, and alerting
  • Backup and restore
  • Kubernetes and Istio Service Mesh
  • Health checks
  • Monitoring and Observability
  • etc.


About .NET Core

.NET is open-sourced through a .NET Foundation under the MIT license, which has almost no restrictions. Users can make money off it.

https://dotnet.microsoft.com/en-us/learn/dotnet/architecture-guides


A. Build using a Mac laptop

https://www.youtube.com/watch?v=bEfBfBQq7EE

  1. Open a Terminal on your Mac
  2. Install MacOS utilities for development (Docker desktop, etc.)
  3. Install VSCode
  4. Install azure-cli
  5. Install dotnet (.NET Core) CLI
  6. Use dotnet info CLI command

  7. Install dotnet-sdk

    ==> Downloading https://download.visualstudio.microsoft.com/download/pr/dfbffbab
    ######################################################################## 100.0%
    ==> Installing Cask dotnet-sdk
    ==> Running installer for dotnet-sdk; your password may be necessary.
    Package installers may write to any location; options such as `--appdir` are ignored.
    Password:
    installer: Package name is Microsoft .NET SDK 7.0.102 (arm64)
    installer: Upgrading at base path /
    installer: The upgrade was successful.
    ==> Linking Binary 'dotnet' to '/opt/homebrew/bin/dotnet'
    🍺  dotnet-sdk was successfully installed!
    
  8. Install brew install protobuf ; protoc –version # libprotoc 3.21.12
  9. Install npm

  10. Install eShopOnContainers

    https://github.com/dotnet-architecture/eShopOnContainers/wiki/Mac-setup

dotnet info CLI commands

Regardless of what environment:

  1. Get environment metadata:

    dotnet --info

    REMEMBER: Different version of .NET can run side-by-side within the same server.

    .NET Release Schedule

    Microsoft has planned the versioning and dates of .NET releases years in advance, for a cadence of one a year:

    dotnet-versions-1154x227.jpg

    • “LTS” (Long Term Support) releases are even numbered.
    • “STS” (Standard Term Support) releases (previously “Current” releases) are supported only 6 months.

    https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core#cadence

  2. List specific dates for release availability and End of support (End of life).

    https://dotnet.microsoft.com/download/dotnet.core

ASP.NET Core

ASP.NET Core is a complete rewrite of the previous ASP.NET framework.

ASP.NET Core is used for developing cloud-based such as web applications, mobile applications, and IoT applications.

  1. S

    dotnet new

Cloud Native

“Beyond the 12 Factor App: Exploring the DNA of Highly Scalable, Resilient Cloud Applications” by Kevin Hoffman adds 3 more to the 12 Factor App published in 2011:

  1. One codebase, one application
  2. API first
  3. Dependency management
  4. Design, build, release, and run
  5. Configuration, credentials, and code
  6. Logs
  7. Disposability
  8. Backing services
  9. Environment parity
  10. Administrative processes
  11. Port binding
  12. Stateless processes

  13. Concurrency
  14. Telemetry
  15. Authentication and authorization

eShopOnContainers

  • http://aka.ms/MicroservicesArchitecture redirects to
    https://github.com/dotnet-architecture/eShopOnContainers
  • https://go.particular.net/eShopOnContainers open-sourced at https://github.com/Particular using NServiceBus
  • https://codeopinion.com/eshoponcontainers-a-microservice-based-net-core-sample-application/
  • https://www.neolisk.blog/posts/2021-06-05-dotnet-arch-eshop-on-cont/

eShopOnContainers is a sample microservices and container-based application that is cross-platform (runs on Linux Windows and macOS) that began in 2017 by Cesar De la Torre. Now powered by .NET 6, Docker Containers, and Azure Kubernetes Services. Most code editors can be used (Visual Studio, VS for Mac, and CLI based environments with Docker CLI, dotnet CLI, VS Code, etc.).

It’s used as the reference app for PDF: Architecting Cloud-Native .NET Apps for Azure by Robert Vettor and Steve “ardalis” Smith. eshoponcontainers-ui-1411x1078.jpg from https://learn.microsoft.com/en-us/dotnet/architecture/cloud-native/introduce-eshoponcontainers-reference-app

References:

  • eShopOnContainers: https://github.com/dotnet-architecture/eShopOnContainers
  • eShopModernizing: https://github.com/dotnet-architecture/eShopModernizing
  • eShopOnWeb: https://github.com/dotnet-architecture/eShopOnWeb
  • eShopUWP: https://github.com/dotnet-architecture/eShopOnUWP
  • eShopOnContainersAI: https://github.com/dotnet-architecture/eShopOnContainersAI

https://dot.net/architecture redirects to
https://dotnet.microsoft.com/en-us/learn/dotnet/architecture-guides

  1. View online https://github.com/dotnet-architecture/eShopOnContainers
  2. Fork it to your own account – Copy just the dev branch.

  3. Define your GitHub username as a variable in your ~/.bash_profile (replacing “wilsonmar” below with the account name you’re using):

    export GITHUBUSER=”wilsonmar”

    PROTIP: Cloning repos into a folder associated with your GitHub account enables you to differentiate among different GitHub accounts, which require different SSH keys.

  4. On your laptop, in Terminal CLI, create a folder with that name and cd to it:

    cd ; mkdir "$GIBHUBNAME" ; cd "$GIBHUBNAME"
    git clone "git@github.com:$GITHUBUSER/eShopOnContainers.git"
    cd eShopOnContainers/src
    

  5. Invoke Docker Desktop app, then:

    docker-compose build
    

    Note the default values provided so you don’t have to do customizations. But for security, note those that should be customized.

    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_USERNAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_SERVICE_BUS_PASSWORD" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_AZURE_STORAGE_CATALOG_NAME" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ESHOP_AZURE_STORAGE_CATALOG_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "INSTRUMENTATION_KEY" variable is not set. Defaulting to a blank string. 
    WARN[0000] The "ORCHESTRATOR_TYPE" variable is not set. Defaulting to a blank string. 
    [
    

    CAUTION: Here are the errors I’m getting on my ARM mac:

    => [eshop/webmvc:linux-latest build 38/39] WORKDIR /src/Web/WebMVC                                                                       0.4s
     => CANCELED [eshop/payment.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                             61.6s
     => CANCELED [eshop/catalog.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                             61.8s
     => ERROR [eshop/mobileshoppingagg:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                          59.1s
     => CANCELED [eshop/webhooks.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                            61.7s
     => CANCELED [eshop/ordering.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                            61.6s
     => CANCELED [eshop/ordering.backgroundtasks:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                61.5s
     => CANCELED [eshop/webmvc:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                                  60.6s
     => CANCELED [eshop/basket.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                              61.4s
     => CANCELED [eshop/identity.api:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                            61.6s
     => ERROR [eshop/webshoppingagg:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                             58.9s
     => CANCELED [eshop/ordering.signalrhub:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                     61.1s
     => CANCELED [eshop/webhooks.client:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app                         61.4s
    ------
     > [eshop/mobileshoppingagg:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app:
    #0 1.850 MSBuild version 17.3.2+561848881 for .NET
    #0 52.97   Devspaces.Support -> /src/BuildingBlocks/Devspaces.Support/bin/Release/net6.0/Devspaces.Support.dll
    #0 56.36 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : Google.Protobuf.Tools cannot determine host OS and CPU. [/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Mobile.Shopping.HttpAggregator.csproj]
    #0 56.36 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : Use environment variables PROTOBUF_TOOLS_OS={linux|macosx|windows} and PROTOBUF_TOOLS_CPU={x86|x64} to try the closest match to your system. [/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Mobile.Shopping.HttpAggregator.csproj]
    #0 56.36 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : You may also set PROTOBUF_PROTOC to specify full path to the host-provided compiler (v3.5+ is required). [/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Mobile.Shopping.HttpAggregator.csproj]
    ------
    ------
     > [eshop/webshoppingagg:linux-latest build 39/39] RUN dotnet publish --no-restore -c Release -o /app:
    #0 1.703 MSBuild version 17.3.2+561848881 for .NET
    #0 53.54   Devspaces.Support -> /src/BuildingBlocks/Devspaces.Support/bin/Release/net6.0/Devspaces.Support.dll
    #0 56.63 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : Google.Protobuf.Tools cannot determine host OS and CPU. [/src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj]
    #0 56.63 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : Use environment variables PROTOBUF_TOOLS_OS={linux|macosx|windows} and PROTOBUF_TOOLS_CPU={x86|x64} to try the closest match to your system. [/src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj]
    #0 56.63 /root/.nuget/packages/grpc.tools/2.34.0/build/_protobuf/Google.Protobuf.Tools.targets(84,5): error : You may also set PROTOBUF_PROTOC to specify full path to the host-provided compiler (v3.5+ is required). [/src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj]
    ------
    failed to solve: executor failed running [/bin/sh -c dotnet publish --no-restore -c Release -o /app]: exit code: 1
    

    https://danielstoyanoff.medium.com/apple-silicon-docker-dotnet-grpc-is-that-compatible-8a05f1a71d89

  6. When no errors are returned, run the service:

    docker-compose up
    
  7. Pop up browser window for each component:

TODO: More ?

https://gayanf.medium.com/deploy-eshoponcontainers-to-aks-357ac48cda60 Deploy eshopOnContainers to AKS

https://faun.pub/eshoponcontainers-experiment-with-image-scanning-21b73ac5c4b7 eShopOnContainers experiment with image scanning using Trivey. by editing the .github/workflows/basket-api.yml file from the eShopOnContainers repository and add a step between the build and push step.


Rock Stars

Useful websites to code using the Microsoft stack:

  • https://github.com/markjprice/cs11dotnet7
  • https://github.com/markjprice/apps-services-net7

From Mark J. Price: “C# 11 and .NET 7 – Modern Cross-Platform Development Fundamentals: Start building websites and services with ASP.NET Core 7, Blazor, and EF Core 7, 7th Edition” published Nov 2022 by Packt.

Mark on Jesse Liberty’s podcast

C# Certifications

Since June, 2022, Microsoft abandoned their 98-xxx series of exams about programming languages.

Secure C# coding:

  • https://learn.microsoft.com/en-us/dotnet/standard/security/secure-coding-guidelines
  • https://www.c-sharpcorner.com/article/writing-secure-code-using-C-Sharp/
  • https://niccs.cisa.gov/education-training/catalog/sans-institute/secure-coding-net-developing-defensible-applications
  • https://dev.to/bytehide/increase-the-security-of-your-net-applications-5-tips-to-follow-right-now-3888
  • VIDEO: How to secure your Blazor C# API w/ Azure Static Web Apps by Frank Boucher
  • https://www.youtube.com/watch?v=bEfBfBQq7EE&t=14m

Classes on Secure C# Coding:

Pluralsight has “SkillsIQ” tests in:

C# 10 Design Patterns

Steve (@ardalis) Smith’s (of WeeklyTestTips podcast and Clean Architecture) C# Console insurance rating app shows Object Programming SOLID Principles for C# Developers:

  1. Single Responsibility Principle (SIP) - Cohesion & Coupling - delegate details to utility classes (logging) - small cohesive types
  2. Interface Segregation Principle (ISP) - not depend on what’s not needed - use Adaptor for different Context
  3. Open for behavior extensions but Closed for modification Principle (OCP) - Parameters, Inheritance, Composition/Injection - Add functionality by adding more classes
  4. Liskov Substitution Principle (LSP) - subtypes must be substitutable for their base types - subtypes must be fully implemented
  5. Dependency Inversion Principle (DIP) - Details depend on Interfaces & Abstract base classes - prefer Constructor Injection (Explicit Dependencies), Inversion of Control/Dependency Injection containers - Change behavior by passing in different dependencies

W3Shools has a $45 to pass 75% of 50-question in 50 minutes.

LinkedIn

Microservices architecture e-book (PDF) Domain Driven Design Patterns:

  • Domain Models (Aggregates, Entity, VO, etc.)
  • Simplified CQRS (Command Query Responsibility Segregation):
    • Dapper MicroORM for queries
    • Commands and Mediator pattern
  • Domain Events within the same microservice
  • Integration Events (across microservices)
  • Multi-container docker-compose.yml
  • Swagger w/Swashbuckle
  • Security (Authentication/Authorization) with tokens from IdentityServer4 wrapping ASP.NET Identity

Pluralsign: Building Microservices 29 Jun 2021 by Mark Heath

https://dzfweb.gitbooks.io/microsoft-microservices-book/content/multi-container-microservice-net-applications/microservice-application-design.html


NUnit Testing

xUnit.net is a free, open source, community-focused unit testing tool for the .NET Framework. Written by the original inventor of NUnit v2, xUnit.net is the latest technology for unit testing C#, F#, VB.NET and other .NET languages. xUnit.net works with ReSharper, CodeRush, TestDriven.NET, and Xamarin.

https://www.codeproject.com/Articles/1278829/Angular-7-with-NET-Core-2-2-Global-Weather-Part-3 Now I show you how to create xUnit test project for ASP .NET Core. In Solution Explorer, add new project, Weather.Test.

Code Vulnerability Scan

VIDEO: “Continuous Integration: Live Static Analysis using Visual Studio & the Roslyn API”</a>

The .NET Compiler Platform (“Roslyn API”) was first described in 2014 by Alex Turner in https://msdn.microsoft.com/en-us/magazine/dn879356.aspx https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/special-issue/csharp-and-visual-basic-use-roslyn-to-write-a-live-code-analyzer-for-your-api

News: Keep Up!

https://aka.ms/MicroservicesEbook NET-Microservices-Architecture-for-Containerized-NET-Applications-(Microsoft-eBook).pdf

https://github.com/dotnet-architecture/eShopOnWeb

https://github.com/dotnet-architecture/eShopOnContainers https://aka.ms/microservicesarchitecture

This reference application is meant to support the free

https://github.com/dotnet-architecture/eShopOnWeb/wiki/Getting-Started-for-Beginners .PDF download ebook: Architecting Modern Web Applications with ASP.NET Core and Azure also https://docs.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/index

Installing Visual Studio 2019
Creating an ASP.NET Core Web App
Working with data using EF Core
Exposing a Web API
Deploying and hosting the app in Azure

https://dotnet.microsoft.com/download/thank-you/aspnet-ebook Architecting Modern Web Applications with ASP.NET Core and Azure.pdf by Steve “ardalis” Smith

Secrets

  • https://wilsonmar.github.io/hello-vault
  • https://github.com/hashicorp/hello-vault-dotnet

Shared libraries

PROTIP: Use Program.cs NWebSec middlware code library for secure HTTP Header handling. See https://docs.nwebsec.com/en/latest

BOOK: Writing Secure Code in ASP.NET by Cyber Academy

COURSE: ASP.NET: Security on LinkedIn Learning by Christian Wenz shows OWASP10 security vulnerabilities, common attacks, and remediation examples in his known-bad e-commerce app written in ASP.NET.


More about Azure

This is one of a series about Azure cloud: