Earlier I posted about creating First ASP.NET Core 3.0 App using Visual Studio 2019 Preview 1 release. ASP.NET Core 3.0 is a major release and has some code breaking changes. However, .NET Core 3.0 preview 1 release didn’t offer any insight of the new features. Recently, .NET Core 3.0 preview 2 came out and now we can get a feel of ASP.NET Core 3.0 new features. In this post, let’s create a new ASP.NET Core 3.0 app with .NET Core 3.0 preview 2 release and take a look at the new features.
ASP.NET Core 3.0 App with .NET Core 3.0 preview 2 release
Before we create the application, first we need to install Visual Studio 2019 and .NET Core 3.0. Let’s first install .NET Core 3.0 SDK.
Installing .NET Core 3.0
To download .NET Core 3.0 preview 2, visit this link. Based on your platform, download the appropriate installer. Once the download is complete, run the installer to install .NET Core 3.0 on your system. The .NET Core 3.0 preview installation will not impact your existing .NET Core version installation.
Installing Visual Studio 2019 Preview
To install Visual Studio 2019 preview, download the installer from this location. Don’t worry. Visual Studio and Visual Studio “Preview” can be installed side-by-side on the same device. It will have no impact on your current stable VS installation.
Visual Studio 2019 offers a completely new project creation experience. You can read more about the new experience here. Once the installation is complete, let’s open the Visual Studio 2019 preview and create the ASP.NET Core 3.0 app. Select the ASP.NET Core Web Application template.
When you click Ok, you will get the following prompt. Select ASP.NET Core 3.0 and choose the MVC template.
The Visual Studio will create an ASP.NET Core 3.0 based MVC project. The solution structure looks similar to the previous version of ASP.NET Core. However, there is one change with respect to dependencies reference, which is the Microsoft.AspNetCore.Mvc.NewtonsoftJson nuget package.
ASP.NET Core shared framework (Microsoft.AspNetCore.App) will only contain first-party assemblies that are fully developed, supported, and serviceable by Microsoft. As part of this change, the following sub-components will be removed from shared framework.
- Json.NET (Newtonsoft.Json)
- Entity Framework Core (Microsoft.EntityFrameworkCore.*)
- Microsoft.CodeAnalysis (Roslyn)
The project file is now targeting to .NET Core 3.0 and also has a reference of Microsoft.AspNetCore.Mvc.NewtonsoftJson
package.
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0-preview-19075-0444" /> </ItemGroup> </Project>
Let’s take a look at the code level changes.
- Open the
Program.cs
and you will see the following code. The ASP.NET Core 3.0 templates use Generic Host. Previous versions used Web Host.public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
The goal of the Generic Host is to decouple the HTTP pipeline from the Web Host API to enable a wider array of host scenarios. Messaging, background tasks, and other non-HTTP workloads based on the Generic Host benefit from cross-cutting capabilities, such as configuration, dependency injection (DI), and logging.
The above code uses
webBuilder
which is a type ofIWebHostBuilder
interface used withWebHostBuilder
. But it will be deprecated and eventually its functionality will be replaced byHostBuilder
, though the interface will remain.The biggest difference between
WebHostBuilder
andHostBuilder
is that you can no longer inject arbitrary services into your Startup.cs. Instead, you will be limited to theIHostingEnvironment
andIConfiguration
interfaces. This removes a behavior quirk related to injecting services intoStartup.cs
before theConfigureServices
method is called. -
As mentioned earlier, Json.NET is removed from the shared framework and now needs to be added as a package. Open
Startup.cs
and take a look atConfigureServices
method.public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc() .AddNewtonsoftJson(); }
- There are some updates to EndPoint routing introduced with ASP.NET Core 2.2. Endpoint routing allows frameworks like MVC as well as other routable things to mix with middleware in a way that hasn’t been possible before. With this, routing decisions can occur earlier into the pipeline so that incoming requests can be mapped to their eventual endpoint before MVC is even invoked. This is now present in the project templates in 3.0.0-preview-2 (Startup.cs -> Configure()).
app.UseRouting(routes => { routes.MapApplication(); routes.MapControllerRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
Here, the
app.UseRouting()
call adds a new Endpoint Routing middleware. TheUseRouting
replaces many of the features that were implemented insideUseMvc()
in the past. TheMapApplication()
brings in MVC controllers and pages for routing andMapControllerRoute
defines the default route.
That’s it for now. You can visit this link for detailed information.
Summary
ASP.NET Core 3.0 will bring some code breaking changes and some of them are available with this preview 2 release. The change regarding ASP.NET Core shared framework to include only those libraries which are developed, supported, and serviceable by Microsoft will definitely reduce the application size by a few bytes. It is the right time to play around ASP.NET Core 3.0 and expect some more changes when the final version comes out.
Thank you for reading. Keep visiting this blog and share this in your network. Please put your thoughts and feedback in the comments section.
I agree. I’ve been developing in .NET ecosystem for the last 4.5 years. Currently in my 3rd year of Bachelor’s degree in computer science and only 1 person in my batch uses C#. Most startups around my location are building their web apps in Python and flask which is a shame given Middleware system of AspNet Core is much more workable than setting the same thing up in flask.
How do you downgrade to dot net 2.2?
Why is dotnet core’s propagation so low in new age companies?
That’s what I also curious about. Here in The Netherlands there is enough Microsoft/.NET/C# jobs, but I heard that in America it is not, strange.
You have .net jobs but not in many startups, Which is a bit strange indeed… but I believe it will change!