The beauty of a tag helper is it's ability to add new HTML to your page. Once you know what you want to change, here are the tools to change the HTML going to the user.
You can create your own custom tag helpers ... but it's a lot easier if you understand the process that tag helpers need to go through. Here are your options when gathering the data that a tag helper needs (and why they can't completely replace HtmlHelpers).
Whenever you have repeated HTML, you should be creating your own tag helpers to simplify your views. Here's how flexible tag helpers can be when you go to integrate them into your page.
.NET Core provides a framework that logging systems can be snapped into. However, what's most important about this framework is how you write your messages out. It's the quality of the message that will let you find where your problems are.
ExpandoObjects let you dynamically add members to your object at run time -- a great way to handle scenarios where you need a lot of flexibility. But how do you work with an object when you don't know the names of its properties?
You can give your users the ability to store any data they want, including stuff they make up at run time, by using an ExpandoObject. In fact, when you don't know what your data is until run time (and you can live without IntelliSense), an ExpandoObject is your best solution.
The reality is that you will need to have, at least, two different configurations: one for production and one for development. Here's how to automate those conversions.
If you move beyond the basics of working with Razor Pages, there are at least two things you should know to support creating Pages that do more than one thing and integrate with existing code.
If you're moving your application's client-side code to Blazor, then you'll want Blazor to manage navigating between pages, too.
There are lots of ways to handle databases in a containerized environment like Docker. Here's how to create SQL Server in a container, how to load it with the data you want and how to integrate that container into whatever project needs it. Be warned: Some PowerShell is used.
Here's how to run a "real-world" application (consisting of an MVC application and a Web Service) in a networked set of Docker containers. And it's just a couple of mouse clicks in Visual Studio to implement it.
If you want to handle the most common pattern in ASP.NET Controllers (displaying a page and then accepting data entered into it), you can do it with Razor Pages. You'll just need less code than if you used a Controller, a View and a model object.
As fond as he is of using Controllers and Views, Peter isn't sure that Razor Pages aren't a better model for Web development. But the first step, adding Razor Pages to your project, isn't as easy as it should be. And, after that, you'll want to integrate them with your existing MVC application.
In ASP.NET Core, your web.config file with its <appsettings> section is gone. The replacement is a more extensive and configurable system that you can leverage to simplify configuring your objects.
ASP.NET Core's support for sharing objects defined at startup is great ... but what if you need to set options on those objects? Here's a case study that starts off great and then descends into over-engineered madness (but only if you want to go that far).