To keep a running example of "how we do web apps", I've updated my Contoso University example app to ASP.NET Core 3.0. This sample app is just a re-jiggering of Microsoft's Contoso University Razor Pages sample app . It shows how we (Headspring) typically use:

  • CQRS w/ MediatR
  • Razor Pages models w/ AutoMapper
  • Validation w/ Fluent Validation
  • Conventional HTML w/ HtmlTags
  • Database migrations w/ RoundhousE
  • Integration testing w/ xUnit
  • Vertical Slice Architecture

The original application didn't really have much/any behavior to speak of in the EF models, so there's not any unit tests, just integration tests. If the app was more than CRUD, we'd refactor handler behavior down to the domain model.

The build script is just pure PowerShell, but in our typical systems, we'd use an actual task-based script runner, like psake or FAKE. Otherwise, it's pretty close to our "normal" stack and usage.

Updating the app to ASP.NET Core 3.0 was quite straightforward, the most I had to do was update some of the models and database to match the updated sample, and convert the services configuration to use the simplified "AddRazorPages" syntax.

Enjoy!