classic-asp-to-aspnet-mvclisted
Install: claude install-skill GuerthCastro/claude-skills-dotnet
# Classic ASP to ASP.NET Core MVC
The target is a server side rendered MVC app on `net10.0`. Most of the page is computed on the
server and returned as finished HTML, which is the closest analogue to how the ASP pages already
work. That similarity is what makes the port tractable, and it is also the trap: an `.asp` file
translated line by line into a `.cshtml` file compiles and runs while keeping every structural
problem it had.
Three components:
- **Models** act like types. Fields and their datatypes, passed around as a unit.
- **Views** are `.cshtml` files. Mostly HTML, with C# available where it earns its place.
- **Controllers** hold the logic. Methods take parameters and return status codes, JSON, or Views.
## Non-negotiable rules
- Every value read from configuration goes through a bound options class. No
`Configuration["Some:Key"]` anywhere, including bootstrap code that runs before the container
exists: that reads a section, and the section name is a constant on the options type it describes.
- Every string that is an external contract is a named constant: third party form fields, HTTP
header names, query string keys. The literal appears once, next to the type that owns it.
- One statement per line. A call that fits on one line stays on one line, however long. Object and
collection initializers and constructor declarations are exempt and keep their braces open.
- Do not port anything whose purpose you cannot state in one sentence. If it survives the port