ASP.NET Core 3.0 – Ten Features Beginners Should Know

If you are tracking the progress of ASP.NET Core, you are probably aware that .NET Core 3 and ASP.NET Core 3.0 are being released at .NET Conf 2019. There are many exciting feature additions and improvements to the latest version of ASP.NET Core.

You might have already stumbled upon the prominent ones. In this article I am enumerating over ten features / improvements for beginners that are worth noting. My aim is to quickly mention them here so that you can explore them in more detail by visiting Microsoft’s official channels such as product documentation and Channel 9.

1. New project templates

In order to use .NET Core 3 and ASP.NET Core 3 you need Visual Studio 2019. There are several project templates and sub-templates that are related to ASP.NET. Some of them are:

  • ASP.NET Core Web Application
  • Blazor App
  • gRPC Service
  • Razor Class Library

Each of the top level template takes you to “sub-templates”. For example, selecting ASP.NET Core Web Application template shows these options:

As you can see, the above figure displays the primary development options under ASP.NET Core – MVC, Razor Pages, and Web API. A few more templates can be found that use JS frameworks.

These project templates contain several improvements and changes. I encourage you to create a project based on each of these templates and take a peek into Program.cs, Startup.cs, and .csproj files.

2. New methods to register MVC / Razor Pages / Web API services

Prior to ASP.NET Core 3, you used methods such as AddMvc() inside ConfigureServices() to register certain services with DI container. The same method was used by MVC, Razor Pages, and Web API projects. In ASP.NET Core 3 there are three independent methods that do this job.

Take a look at this code fragment:

public void ConfigureServices (IServiceCollection services) { services.AddControllersWithViews(); services.AddRazorPages(); services.AddControllers(); }

You should use AddControllersWithViews() method in MVC applications. The Razor Pages and Web API applications should use AddRazorPages() and AddControllers() methods respectively. That means each of these methods is fine tuned for a specific development option and registers only services related to that option. of course, you can call any combination of these methods depending on you needs. For example, if your app requires MVC and Web API then you will use AddControllersWithViews() and AddControllers() methods.

3. End point routing

In previous versions of ASP.NET Core you used UseMvc() or UseMvcWithDefaultRoute() extension methods to wire routing middleware. Routing through these methods was the default option. A new form of routing called Endpoint Routing was introduced later but was not the default option. In ASP.NET Core 3 end point routing is the default way to deal with application routes. Older methods are still available but you should avoid using them because endpoint routing offers several advantages over traditional routing. This is how the endpoint routing looks like at code level:

app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: “default”, pattern: “{controller=Home} /{action=Index} /{id?}”); });

4. Blazor server side

Blazor has come a long way since its inception. From being an “experimental” feature it has become a full-fledged framework for building SPA kind of applications using C#, HTML, and CSS. That’s right! You can build the goodness of SPA using Blazor without using JavaScript. Of course, it will takes its own time to mature into a framework of choice but at least that process has began.

Blazor comes with two hosting models – server side and client side. The server side hosting model uses SignalR as a channel for client-server communication. The client side model uses WebAssembly download and run a .NET application in order to run it within the browser’s boundary. As a part of the final release Blazor server side is being released whereas Blazor client side is planned to be released at some later date. Don’t miss this welcome addition to the ASP.NET Core family.

5. gRPC support

As far as ASP.NET Core is concerned Web API became the prominent way to create services. Web API is a REST framework. gRPC is a framework for building services that are based on Remote Procedure Calls. It was originally developed by Google.

6. JSON Serialization classes

JSON data format is quite common these days. In the previous versions, ASP.NET Core used Newtonsoft’s Json.NET framework for its JSON processing. You can continue to use it in ASP.NET Core 3 also. However, there is a new set of classes that has taken over the responsibility. These classes reside inside System.Text.Json namespace and are used by default for all JSON processing in ASP.NET Core 3.

The JsonSerializer class has Serialize() and Deserialize() methods that can serialize .NET types to JSON and vice a versa. Async versions of these methods are also available.

7. Entity Framework Core 3 support

Entity Framework Core is a preferred way of writing data access logic under ASP.NET Core. Obviously, ASP.NET Core 3 can leverage all the feature improvements in EF Core 3. EF Core now also has Azure Cosmos DB provider that allows you to work with this emerging NoSQL database engine.

8. New data provider for SQL Server – Microsoft.Data.SqlClient

Although EF Core has become quite popular due to its OR/M capabilities, there are cases when you need raw data access. If you ever worked with ADO.NET objects such as SqlConnection, SqlCommand, and SqlDataReader you know what I am referring to.

Microsoft has developed a successor of System.Data.SqlClient that is available to .NET Core 3 applications as Microsoft.Data.SqlClient NuGet package. Although System.Data.SqlClient will be still available, going forward the new data provider is a recommended way to use in ASP.NET Core applications. If you are looking to quickly port existing ADO.NET code to ASP.NET Core 3 applications then Microsoft.Data.SqlClient would be of great help.

9. Authentication and authorization middleware

In earlier versions of ASP.NET Core you used UseAutnentication() in the Configure() method to add authentication support and then used [Authorized] attribute in controllers and Razor Pages. Although this is still required, you also need UseAuthorization() to use [Authorize] attribute. There are other improvements to authentication system such as support for certificate and Kerberos authentication. 

10. C# 8 support

For examples, features such as default interface members, ranges, nullable reference types, asynchronous streams, and null-coalescing assignment can be used in your applications targeting .NET Core 3.

I hope you got a glimpse of what’s coming with ASP.NET Core 3.0. Following its release in September 2019, it is expected that version 3.1 will be released in November 2019 that will include minor improvements and bug fixes.

That’s it for now! Keep coding!!