Email hello@ps3g.com: software development, cloud, data and AI for organizations of every size.

Modernizing ASP.NET WebForms and Classic ASP

Modernizing ASP.NET WebForms and Classic ASP

Options for modernizing ASP.NET WebForms and Classic ASP applications: incremental migration, Blazor as a WebForms successor, rewrite vs replace.

Email hello@ps3g.com

ASP.NET WebForms modernization has no shortcut: WebForms does not exist in ASP.NET Core, no tool converts a page automatically, and Classic ASP is two generations older still. The realistic options are five: contain the application and keep it running safely; migrate incrementally, with a new ASP.NET Core application in front and old pages served behind a proxy until each is replaced; rewrite the UI in Blazor, whose component and event model is the closest modern relative of WebForms, while reusing business logic and the database; rewrite in Razor Pages or MVC; or replace the application with a product. This guide compares them, explains how to estimate the work, and lists the pitfalls that sink these projects.

Why these applications are still running

WebForms arrived with the first version of .NET and dominated business web development for a decade; Classic ASP preceded it. Applications from that era are still in production for good reasons.

They work. They encode years of business rules that nobody has written down anywhere else. They have no tests, so every change is risky, which means they are changed as little as possible, which keeps them stable. And their users have stopped noticing the interface.

What has changed is the environment around them. .NET Framework is frozen at version 4.8, serviced as a Windows component but receiving no new features; check Microsoft’s lifecycle page for the exact status of your version and Windows Server.

Third-party controls and libraries have moved on. Auditors ask about supported platforms. Developers who know WebForms are retiring faster than they are being replaced, and nobody is learning Classic ASP. The broader context is in our .NET Framework end-of-life guide; this article is about the specific problem of pages that cannot be upgraded in place.

ASP.NET vs ASP.NET Core: why WebForms cannot just be upgraded

ASP.NET Core was a rewrite of the web stack for cross-platform .NET. It kept MVC and Web API as patterns, replaced System.Web with a lightweight middleware pipeline, and dropped WebForms entirely: no ViewState, no server controls, no page lifecycle, no postback model. Code written against MVC 5 carries over with moderate changes. A WebForms page, with its .aspx markup, code-behind, GridViews and UpdatePanels, has nothing to map onto.

The same is true of Classic ASP, which is VBScript executed by IIS with no relationship to .NET at all. That is why these applications need a decision rather than an upgrade tool.

ASP.NET WebForms modernization options compared

Option What it involves Best for Main risk
Contain Keep the application on .NET Framework 4.8 and a supported Windows Server, harden it, isolate it behind a proxy, freeze features Internal apps with few users, no external exposure and a known retirement date The retirement date slips and the app runs unsupported for years
Incremental migration A new ASP.NET Core app sits in front; YARP proxies unmigrated routes to the WebForms app; System.Web adapters share session and authentication; pages move one at a time Large, actively used applications that must keep shipping changes during the move Two apps run side by side; discipline needed to finish rather than stall at half
WebForms to Blazor Rebuild the page layer as Blazor components, reusing business logic and data access where they are separable Form-heavy internal and customer applications maintained by C# developers Recreating WebForms habits (ViewState thinking, giant code-behind) in Blazor
Rewrite in Razor Pages or MVC Rebuild as server-rendered pages, often with a JavaScript front end for interactive parts Public-facing applications where SEO and conventional web patterns matter Scope creep as every screen gets redesigned
Replace Move the function to a SaaS or packaged product and migrate the data Commodity functions: helpdesk, HR forms, timesheets, basic CRM Business rules the product does not support
Classic ASP rewrite Rebuild the pages in ASP.NET Core; the database and any COM components get their own plan Every Classic ASP application that will outlive its server Undocumented logic in VBScript includes and stored procedures

Most real projects combine options. A typical plan contains the parts that will be retired, moves the core incrementally with the first new pages built in Blazor, and replaces one module with a product. Microsoft’s own guidance for the incremental path is on its incremental ASP.NET to ASP.NET Core migration page.

Why Blazor is the usual WebForms successor

Blazor appeals to WebForms teams for a specific reason: it is component-based, event-driven, written in C#, and can keep state on the server. A developer who thinks in terms of a page with controls, events and server-side handlers can read a Blazor component on day one. Interactive Server render mode even looks like a postback model from the outside, with the important difference that only UI diffs cross the wire rather than a full page and its ViewState.

Two cautions. First, Blazor is not WebForms and the worst Blazor applications are the ones that try to be: thousand-line components with business logic in event handlers, state stuffed into static fields, and no separation of concerns. Second, Interactive Server holds a connection per user and needs sticky sessions or the Azure SignalR Service to scale out; for larger audiences, mixing static server rendering and WebAssembly per page is the answer. Our comparison of legacy modernization approaches places the Blazor rewrite among the other patterns for non-.NET systems too.

Estimating effort

Nobody can quote a WebForms migration from a page count alone, but the drivers are consistent. Score each before you ask for an estimate.

  1. Pages and user controls. Count them, then weight by complexity: a read-only list is small, a multi-step wizard with validation and conditional controls is large.
  2. Where the business logic lives. Logic in a separate class library can be reused as is. Logic in code-behind files must be extracted first, and that extraction is often the largest single task.
  3. Server controls and third-party suites. GridViews with templated columns, UpdatePanels, and commercial control suites each need an equivalent chosen and, sometimes, a license bought.
  4. Data access. Typed DataSets, inline SQL and ObjectDataSources are replaced with Entity Framework Core or Dapper; stored procedures usually stay.
  5. Authentication. Forms Authentication and Membership move to ASP.NET Core Identity or Entra ID, and user records may need migration.
  6. Reports and exports. Reporting tools bound to .NET Framework are a common late surprise; check vendor support early.
  7. Integrations. Every web service call, file drop and scheduled job that touches the application.
  8. Tests and documentation. Usually none. Budget for characterization tests before any code is replaced.
  9. VB.NET. ASP.NET Core and Razor support C# only, so a VB.NET to C# migration is part of the job for VB web applications. Converters handle most syntax; the rest is review and testing. VB class libraries can stay in VB and be referenced from the new application.
  10. People. Whether the original developers are available, and whether the business users who know the rules have time to answer questions.

For Classic ASP, add the database and COM component inventory, the include-file tangle, and the fact that VBScript cannot be reused anywhere. The one mercy is that Classic ASP applications are usually small by modern standards.

Pitfalls that sink these projects

  • The big-bang rewrite with moving scope. A rewrite that must also add every feature anyone has wanted for ten years never ships. Freeze scope: parity first, improvements after.
  • Rebuilding WebForms in Blazor. See above. Set component size limits and a review process from the first page.
  • Ignoring the database. Logic in triggers and stored procedures, columns with meaning nobody remembers, and a schema designed for DataSets will not fix themselves.
  • Losing undocumented rules. If a page has been doing something odd for years, somebody depends on it. Characterization tests and real users in acceptance testing are the only defense.
  • No cutoff for the old system. Incremental migrations that never schedule the last route end up as two permanent applications. Put the decommission date in the plan.
  • Changing architecture and platform at once. Splitting into services during the migration doubles the risk; migrate first, then consider whether microservices are worth it.
  • Skipping the authentication plan. User migration, password handling and session sharing between old and new apps need design, not improvisation.
  • Underestimating reports. Users forgive a changed screen; they do not forgive a missing month-end report.

Where PS3G fits

PS3G runs .NET migration and modernization projects that begin with an assessment: an inventory of pages, controls, logic, data access, integrations and reports, a per-application effort and risk rating, and a recommended mix of the options above. We build the incremental migration with YARP and the System.Web adapters, rewrite page layers in Blazor or Razor Pages, convert VB.NET to C#, and test for parity through our testing center of excellence before cutover. For applications in other stacks, or a portfolio-wide plan, our application modernization service applies the same method. We have worked on the Microsoft stack for more than ten years, from Wilmington, Delaware and an India delivery center, for organizations of every size.

Related reading

Frequently asked questions

Can ASP.NET WebForms be converted to ASP.NET Core automatically?

No. Microsoft’s .NET upgrade tooling converts project files, libraries and MVC code, but it does not translate WebForms pages, because ASP.NET Core has no page lifecycle, ViewState or server controls to map them onto. Commercial tools claim partial conversion; treat their output as a starting point that still needs review, testing and redesign. The incremental migration pattern is the supported way to move a WebForms application without a single cutover.

Is Blazor the replacement for WebForms?

It is the closest replacement Microsoft offers: component-based, event-driven, C# throughout, with an optional server-side state model that WebForms developers recognize. It is not a drop-in replacement; pages are rebuilt as components, and the design should follow Blazor’s patterns rather than imitate postbacks. Razor Pages and MVC remain valid alternatives, especially for public-facing applications.

What is the best way to migrate Classic ASP?

Rebuild the pages in ASP.NET Core (Razor Pages or MVC), keep the database, and inventory every COM component and include file first, because that is where the surprises are. Classic ASP code cannot be reused, so the project is a rewrite sized by the number and complexity of pages. Many Classic ASP applications are small enough that the rewrite is faster than people fear once the rules are documented.

Can we keep running WebForms safely for now?

Often yes, for a defined period. .NET Framework 4.8 is serviced with the Windows version it runs on, so a WebForms application on a supported Windows Server still receives security updates; check Microsoft’s lifecycle page for your combination. Reduce exposure by patching, restricting network access, and freezing features, and set a retirement or migration date so containment does not become permanent.

How do we migrate VB.NET to C#?

Web code must be converted, because ASP.NET Core supports only C# in Razor and the web project. Automated converters translate most VB.NET syntax; the remaining work is reviewing idioms that differ, such as late binding, optional parameters and event handling, and running tests to confirm behavior. VB class libraries do not have to be converted and can be referenced from the new C# application as they are.

Talk to us about your project

Tell us what the application does and what worries you about it. We will reply with questions, not a sales pitch, and set up a short video meeting if it helps. See our .NET migration and modernization and application modernization services.

Email hello@ps3g.com