ASP.NET is an excellent framework for building web applications in a Windows environment. About 2 years ago, Microsoft announced that a large part of .NET was going to be open sourced. This was huge. In fact, I had moved away from .NET to work in jvm-based languages and this announcement brought me back to .NET.
I also like the amount of tools that are readily available to ASP.NET, including MVC, WebForms, Web API, and Entity Framework.
The ease with which you can deploy ASP.NET applications to local servers or to Azure is great.
The thing I dislike the most about ASP.NET is how RAD Microsoft has been trying to make software development (RAD stands for "Rapid Application Development"). This is both a good thing and a bad thing. It's a good thing in that developers can throw together an application quickly using Visual Studio, and almost anyone can maintain that application by pointing, clicking, and editing visual components in the IDE.
This simplification of software development allows for a lot of very inexperienced developers to work within applications without much complexity. The reason this is a problem is that such developers can go for years, literally, without progressing past this point. I once interviewed someone with 10 years of experience for a senior level position, and because of Microsoft's good intentions, he didn't know advanced topics like reflection or modifying the ASP.NET pipeline. You'll see this a lot in the .NET community, and it leads to a lot of unnecessary software maintenance overhead as well as operations overhead.
Speaking of overhead, prior to the current open source shift by Microsoft, ASP.NET mostly required deployment to Windows servers. This requires often hefty licenses. It's been possible for some time to deploy to Linux or OS X Server using Mono, but there have always been subtle differences between Mono and Microsoft .NET which made this deployment scenario a pain.
Another thing that gets me about ASP.NET and .NET in general is how the frameworks are versioned. You'll have ASP.NET 4, which can run on .NET 3.5 or the many versions of 4.x. The version of ASP.NET being out of sync with the .NET runtime has always been a confusion for a lot of developers.
To further versioning confusion, Microsoft's new approach to ASP.NET (call it ASP.NET 5) will run on .NET 4.5.x and the new open source '.NET Core'. Microsoft recently created a matrix (https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/standard-platform.md) to address any versioning confusion. To further add to the mix, there's currently discussion to rename ASP.NET 5 to ASP.NET 1.0.
On top of this versioning craziness, the new ASP.NET is written for engineers (e.g. those who: can write libraries/modules/SDKs, understand dependency injection and abstractions very well, can learn new tools quickly) rather than developers (e.g. those who use libraries and frameworks to create applications). I feel like companies who continue with ASP.NET will sorely discover this abrupt shift from RAD focus back to software as a science and an art. In other words, there will be a steeper divide between "rockstars" and "noobs".
If you're not already using ASP.NET, check out jvm based language alternatives such as Play or Scalatra. Also evaluate NancyFX. Don't just choose ASP.NET because others use it. I would recommend writing somewhat complex systems in multiple frameworks and running them in production for a couple of months to evaluate not only development overhead, but operational and maintenance overhead of each.
Software as a service web applications, APIs, and services.
ASP.NET allows for easy development, testing, static analysis, and deployment of enterprise level applications.