Title Page Copyright and Credits Hands-On Full-Stack Web Development with ASP.NET Core PacktPub.com Why subscribe? Packt.com Contributors About the authors About the reviewers Packt is searching for authors like you Preface Who this book is for What this book covers To get the most out of this book Download the example code files Download the color images Conventions used Get in touch Reviews Becoming a Full-Stack .NET Developer The full-stack developer Full-stack development Backend fundamentals Hypertext Transfer Protocol  HTTP is a stateless protocol HTTP/2 Representational State Transfer ASP.NET Core Frontend fundamentals  Hypertext Markup Language  CSS JavaScript TypeScript JavaScript frontend frameworks Angular React Vue.js Summary Setting Up Your Development Environment Visual Studio Installing Visual Studio Community Node.js and npm Installing Node.js TypeScript Installing TypeScript Google Chrome Fiddler Installing Fiddler Summary Creating a Web Application with ASP.NET Core ASP.NET Core overview .NET Core Open source Lightweight and fast Modular Host anywhere Creating an ASP.NET Core application Default files in an ASP.NET Core project Predefined project templates The Startup class Code execution order Different startups for different environments Changing the Startup class name Serving static files The content root and web root folders Setting the server to serve static files Serving default documents Configuring the available MIME types Getting familiar with the ASP.NET Core MVC framework The MVC pattern MVC in SPAs Adding MVC to ASP.NET Core Controllers Views View files and their location Creating a view Routing Adding routes Adding routes via UseMvc Adding routes via route attributes Routing in SPAs Summary Building REST APIs with ASP.NET Core Web API Overview — REST APIs with ASP.NET Core API Creating a simple API  Inspecting your APIs using Fiddler and Postman Fiddler Postman Routing Conventional routing Defining a new route template Attribute-based routing Parameterizing the route template Default values Constraints The model Model binding Query strings Message body Header values Model validation Generating a response of different types Explicit return type IActionResult and ActionResult<T> Asynchronous actions Controller response helper methods Summary Persisting Data with Entity Framework Installing Entity Framework Core  Creating your data model Defining the entities The DbContext Configuring the model mapping Configuring the database connection with DbContextOptions<TContext> Creating a database with EF Core migrations Creating a new migration Adding automatic migrations Connecting to the database  Adding seed data Saving data Updating and deleting objects Querying data Loading related entities Creating conditional queries with the IQueryable deferred execution Mapping the API results to DTOs Mapping entities to DTOs with AutoMapper Summary Securing the Backend Server Authenticating and authorizing application users Adding identity management entities to your data model Enabling the identity infrastructure  Enabling token-based authentication with JSON Web Token The authentication and authorization flow Creating a user registration API Implementing the login functionality and generating a JWT Adding user claims Configuring your backend to always require authentication   Configuring an action to allow anonymous access Controlling access to APIs with authorization Adding claims that can be used for authorization Authorizing users by their role Creating an authorization policy Enabling Cross-Origin Resource Sharing Summary Troubleshooting and Debugging Adding logging to your application Writing a log message from the controller Filtering log messages Log providers Provider-specific configuration and filters Enabling diagnostics with Application Insights Responding gracefully in the event of errors and exceptions Adding a correlation identifier to responses The developer exception page Adding a global exception handler Making your APIs discoverable and self-documenting with the OpenAPI standard (Swagger) Generating a Swagger file from the ASP.NET Core application Adding the Swagger UI to your application Sending a request through the Swagger UI  Generating client code from a Swagger file Swagger editor Summary Getting Started with Frontend Web Development Getting started with frontend web development HTML CSS JavaScript Notable progress and future development Web components WebAssembly The Everyday Market app Homepage with product listings Product page New product page jQuery Everyday Market homepage using jQuery Initial layout REST API access Menu item template Category menu items query Product item template Product cards query Busy indicator Summary Getting Started with TypeScript TypeScript The TypeScript compiler Types Basic types Arrays Enums Objects Functions Type inference Type casting Type aliasing Interfaces Extending interfaces Classes Access modifiers Members Class inheritance and interface implementation Modules Decorators Summary Further reading App Development with Angular Angular overview Building blocks Angular CLI Setup and common commands Linting code Running tests Running the project Key app parts Modules Components Header component Global styles Assets Category-menu-item component category-menu component products-page component Data binding Interpolation binding Property binding Event binding Two-way binding Component interaction Input ngFor Output Injectable services HTTP Busy indicator ngIf Distribution Environments Summary Implementing Routing and Forms Client-side routing Using Angular Router Implementing a routed page Implementing template-driven forms in Angular Using Angular's ngModel directive Implementing form validation Element references Summary App Development with React React overview Building blocks Creating a React app Key app parts Components Render function JSX Using JSX Header component Props State setState Stateless functional components CategoryMenu List rendering Product listing Busy indicator Conditional rendering Summary App Development with Vue Vue.js overview Building blocks Vue CLI Key app parts Components Single file components Header component Global styles Assets Data binding and component interaction Component definition object Props Interpolation binding Property binding Data Methods Events Computed The category menu List rendering Product listing Busy indicator Conditional rendering Summary Moving Your Solution to the Cloud What is cloud computing? Virtualization and automation Cloud service models Working with Microsoft Azure  Creating a Microsoft Azure account Getting familiar with the portal and with the command line The Azure portal Azure portal blades Using the Azure CLI The Azure account and resources model Azure Resource Manager Resource groups ARM templates Pricing and billing Summary Deploying to Microsoft Azure Creating a production environment with Azure App Service App Service plan Creating your App Service  Linking a SQL server database to the application  Choosing an Azure SQL pricing tier Deploying the GiveNTake backend service from Visual Studio Creating an automated build and release pipeline in Azure DevOps  Creating a build pipeline Creating a release pipeline that will deploy to Azure Configure the release pipeline artifact Configure the release pipeline stage Deploying the GiveNTake frontend to Azure App Service Configuring Azure App Service to work with an Angular application Creating a build pipeline for the Angular app Creating a release pipeline for the Angular app Summary Taking Advantage of Cloud Services Scaling your service Scaling up your App Service  Scaling out your App Service  Autoscaling Cloud Diagnostics with Application Insights Connecting Azure Application Insights to your App Service Connecting the ASP.NET Core logger to Azure Application Insights Setting the Instrumentation Key in Application settings Analyzing Application Insights telemetry End-to-end transaction analysis  Advanced querying and visualizing with Analytics Application map Testing in production with Deployment slots Deploying to a Deployment slot Swapping between Deployment slots Testing in production Summary Other Books You May Enjoy Leave a review - let other readers know what you think