Powering Innovation With .NET 8
Introduction
The .NET landscape continues to evolve at a blistering pace as it released its latest update — .NET 8.0.1 on January 11th, 2024; thanks to LTS policy.
It’s more than just a patch update; it’s a powerhouse packed with performance improvements, developer-friendly tools, and exciting cross-platform capabilities.
Unleashing the Speed
Performance is no longer just a buzzword in .NET, rather it’s a tangible reality. The latest release shows reductions in garbage collection times. This is possible with its optimized algorithms and improved memory management. JIT compilation has also received a major overhaul, leading to faster application startup and smoother execution.
These enhancements translate to real-world improvements, with many applications experiencing up to 20% faster execution times compared to previous versions.
More Done, Less Time Wasted
.NET 8.0.1 understands that developers are time-pressed beings. To ease their burdens, the platform introduces a list of productivity-boosting tools and features. Minimal APIs let you design lightweight web APIs with minimal code and boilerplate, reducing development time and maintenance headaches.
Hot Reload for ASP.NET Core eliminates the dreaded server restart cycle, allowing you to see code changes reflected instantly. This leads to a more fluid development workflow. Improved tooling for code analysis and debugging further adds to the efficiency mix, helping you identify and fix issues faster.
Multi-platform Mastery with .NET MAUI
Gone are the days of juggling separate codebases for iOS, Android, Windows, and macOS. .NET MAUI (Multi-platform App UI) empowers you to build beautiful native mobile and desktop applications using a single codebase. This translates to massive savings in development time and effort, allowing you to focus on your app’s core functionality instead of platform-specific intricacies.
Imagine crafting a stunning mobile game or a feature-rich desktop application, all powered by the magic of .NET MAUI and your shared codebase.
From Code to Cloud, Seamlessly
.NET 8.0.1 simplifies the deployment process, making it easier than ever to get your creations onto various environments, including cloud platforms and containers. Improved container image support and smaller footprints allow for smoother deployments and efficient resource utilization. Whether you’re targeting Azure, AWS, or any other cloud platform, .NET 8.0.1 has your back.
Security First, Always
.NET 8.0.1 offers a range of features to protect your applications from vulnerabilities. Enhanced cryptography libraries ensure secure data transmission and storage, while deprecation of insecure protocols and APIs minimizes potential attack vectors. Improved logging and auditing capabilities provide better visibility into your application’s security posture, allowing you to proactively identify and address potential threats.
In today’s digital landscape, security is paramount. And .NET 8.0.1 has got everything you need.
Beyond the Surface
The list of innovations in .NET 8.0.1 goes beyond these highlights. Hardware allows modern CPUs and GPUs in boosting performance in areas like scientific computing and image processing. WPF hardware acceleration in RDP enhances remote application experiences, making them smoother and more responsive. And the improvements continue, from modernized asynchronous programming primitives to enhanced Blazor capabilities, offering developers a richer and more versatile platform.
.NET 8.0.1 is an invitation to build faster, more secure, and truly cross-platform applications with increased developer productivity. The future of application development is bright with .NET and this latest release proves it right.
For more information, please head over to our Hire .NET Developer page and to develop your dream project using ASP.NET, Hire .NET Developer at HK Infosoft – we are destined to provide you with an innovative solution using the latest technology stacks. E-mail us any clock at – hello@hkinfosoft.com or Skype us: “hkinfosoft”.
Content Source:
- .NET Official Documentation
Latest updates and features in .NET 7
NET 7 is the successor to .NET 6 and focuses on being unified, modern, simple, and fast. .NET 7 will be supported for 18 months as a standard-term support (STS) release. .NET 7 was released on November 8, 2022 and is the latest version of the .NET platform. It includes a number of new features and improvements, including:
- C# 11: C# 11 includes a number of new features, such as global using directives, file-scoped namespaces, and record structs.
- Performance improvements: .NET 7 includes a number of performance improvements, such as faster startup times and lower memory usage.
- New features for cloud-native development: .NET 7 includes a number of new features for cloud-native development, such as support for HTTP/3 and improvements to minimal APIs.
- New features for desktop development: .NET 7 includes a number of new features for desktop development, such as support for WinUI 3.1 and improvements to Windows Presentation Foundation (WPF).
- New features for mobile development: .NET 7 includes a number of new features for mobile development, such as support for .NET MAUI and improvements to Xamarin.Forms.
C# 11 features in .NET 7
C# 11 includes a number of new features, such as:
- Global using directives: Global using directives allow you to import namespaces at the top of your code file, so that you don’t have to import them in each class.
- File-scoped namespaces: File-scoped namespaces allow you to define namespaces that are only accessible within the current file.
- Record structs: Record structs are a new type of struct that is specifically designed for storing data. They are similar to regular structs, but they have some additional features, such as automatic property generation and initialization.
- Init-only setters: Init-only setters allow you to set properties only once, during object creation or initialization.
- Required properties: Required properties must be set before the object is used.
- Asynchronous streams: Asynchronous streams allow you to read and write data asynchronously, without blocking the thread.
- Improvements to generic math: Generic math has been improved in C# 11, making it easier to write generic math code.
- New APIs for pattern matching: C# 11 includes new APIs for pattern matching, making it more powerful and easier to use.
Performance improvements in .NET 7
.NET 7 includes a number of performance improvements, such as:
- Faster startup times: .NET 7 has faster startup times than previous versions of .NET. This is due to a number of improvements, such as precompiling more of the runtime and using a new JIT compiler.
- Lower memory usage: .NET 7 uses less memory than previous versions of .NET. This is due to a number of improvements, such as reducing the size of the runtime and using a new garbage collector.
- Improved performance of regular expressions: The regular expression library in .NET 7 has been improved, resulting in significant performance gains for many regular expressions.
- Improved performance of ASP.NET Core: ASP.NET Core in .NET 7 has a number of performance improvements, such as faster routing and caching.
New features for cloud-native development in .NET 7
.NET 7 includes a number of new features for cloud-native development, such as:
- Support for HTTP/3: .NET 7 supports HTTP/3, the latest version of the HTTP protocol. HTTP/3 offers a number of benefits over HTTP/2, such as improved performance and reliability.
- Improvements to minimal APIs: Minimal APIs in .NET 7 have been improved, making them easier to use and more powerful. For example, minimal APIs now support file uploads and rate limiting.
- Improvements to container support: .NET 7 includes a number of improvements to container support, such as the ability to publish directly to containers and to use central package management with NuGet.
New features for desktop development in .NET 7
.NET 7 includes a number of new features for desktop development, such as:
- Support for WinUI 3.1: .NET 7 supports WinUI 3.1, the latest version of the Windows UI platform. WinUI 3.1 includes a number of new features, such as support for Fluent Design and XAML islands.
- Improvements to Windows Presentation Foundation (WPF): WPF in .NET 7 has a number of improvements, such as support for dark mode and variable fonts.
New features for mobile development in .NET 7
.NET 7 includes a number of new features for mobile development, such as:
- Support for .NET MAUI: .NET MAUI is a new cross-platform UI framework that allows you to build native mobile and desktop applications from a single codebase. .NET MAUI is still in preview, but it is expected to be released in the near future.
- Improvements to Xamarin.Forms: Xamarin.Forms in .NET 7 has a number of improvements, such as support for new platform features and performance enhancements.
For more information, please head over to our Hire .NET Developer page and to develop a website using ASP.NET, Hire .NET Developer at HK Infosoft – we are destined to provide you with an innovative solution using the latest technology stacks. E-mail us any clock at – hello@hkinfosoft.com or Skype us: “hkinfosoft”.
Content Source:
- DotNet Official Documentation
How to build a RESTful Web API using .NET Core 6
.NET 6 is the latest LTS (Long Term Support) release currently and will be supported until November 12, 2024.
This API will manage movie records stored in a relational database (SQL Server) as described in the table below:
The sections of this post will be as follows:
- What is REST?
- Creating a Web API Project
- Adding a Model
- Adding a Database Context
- Creating Database with Migrations
- Creating API Controller and Methods
You will need the following tools installed on your computer:
- Visual Studio 2022
- .NET 6.0 SDK
- Microsoft SQL Server Express
What is REST?
RESTful APIs conform to the REST architectural style.
REST, or REpresentational State Transfer, is an architectural style for providing standards between computer systems on the web, making it easier for systems to communicate with each other.
REST relies on client-server relationship. This essentially means that client application and server application must be able to evolve separately without any dependency on each other.
REST is stateless. That means the communication between the client and the server always contains all the information needed to perform the request. There is no session state in the server, it is kept entirely on the client’s side.
REST provides a uniform interface between components. Resources expose directory structure-like URIs.
REST is not strictly related to HTTP, but it is most commonly associated with it. There are four basic HTTP verbs we use in requests to interact with resources in a REST system:
- GET— retrieve a specific resource (by id) or a collection of resources
- POST— create a new resource
- PUT— update a specific resource (by id)
- DELETE— remove a specific resource by id
In a REST system, representations transfer JSON or XML to represent data objects and attributes.
REST has had such a large impact on the Web that it has mostly displaced SOAP-based interface design because it’s a considerably simpler style to use.
Creating a Web API Project
Open Visual Studio 2022 and select Create a new project and then select ASP.NET Core Web API:
and give a name to your project in the following screen and then click Next.
In the next screen, select .NET 6.0 as the framework and click Create:
At this point you have a starter project as follows:
In the Program.cs you can see that Swagger support is added automatically to your project:
And also Swashbuckle.AspNetCore NuGet package is added as a dependency.
Now, let’s run (Ctlr+F5) the project to see the default output. When the browser opens and the Swagger UI is shown, select the GET method in the WeatherForecast part and then select Try It Out and Execute:
Also, you can use the curl URL shown in the Swagger UI for this method and see the result of the URL in the browser:
When you run the application, the default URL comes from the launchSettings.json:
And the result values come from the GET method of the WeatherForecastController:
As you see, values here are hard coded and randomness is added to generate different values.
In your Web API, you will create your own records in an SQL server database and will be able to view, update and delete them through REST API endpoints.
Adding a Model
Now, you will implement your data model class.
In Solution Explorer, right-click the project. Select Add -> New Folder and name the folder Models.
Then right-click the Models folder and select Add->Class. Name the class Movie.cs and click Add.
Next, add the following properties to the class:
The Id field is required by the database for the primary key.
Entity Framework Core
You will use your model with Entity Framework Core (EF Core) to work with a database.
EF Core is an object-relational mapping (ORM) framework that simplifies the data access code. Model classes don’t have any dependency on EF Core. They just define the properties of the data that will be stored in the database.
In this post, you will write the model classes first and EF Core will create the database. This is called Code First Approach.
Let’s add the EF Core NuGet packages to the project. Right-click on the project and select Manage NuGet Packages… and then install the following packages:
Adding a Database Context
The database context is the main class that coordinates Entity Framework functionality for a data model. This class is created by deriving from Microsoft.EntityFrameworkCore.DbContext class.
Now, right-click the Models folder and select Add ->Class. Name the class MovieContext and click Add. Then add the following code to the class:
The preceding code creates a DbSet<Movie> property for the entity set.
In Entity Framework terminology, an entity set typically corresponds to a database table and an entity corresponds to a row in the table.
The name of the connection string is passed into the context by calling a method on a DbContextOptions object. For local development, the ASP.NET Core configuration system reads the connection string from the appsettings.json file.
We need to add our connection string to the appsettings.json. You will use the local SQL server instance in your machine and you can define the connection string as follows:
You can change the database name if you want.
Dependency Injection
ASP.NET Core is built with Dependency Injection (DI). Services (such as the EF Core DB context) are registered with DI during application startup. Components that require these services are provided with these services via constructor parameters.
Now, you will register your database context to the built-in IOC container. Add the following code to Program.cs:
Creating Database with Migrations
Now, you will create the database using the EF Core Migrations feature.
Migrations lets us create a database that matches our data model and update the database schema when our data model changes.
First, you will add an initial Migration.
Open Tools -> NuGet Package Manager > Package Manager Console(PMC) and run the following command in the PMC:
Add-Migration Initial
The Add-Migration command generates code to create the initial database schema which is based on the model specified in the MovieContext class. The Initial argument is the migration name and any name can be used.
After running the command, a migration file is created under the Migrations folder:
As the next step, run the following command in the PMC:
Update-Database
The Update-Database command runs the Up method in the Migrations/{time-stamp}_Initial.cs file, which creates the database.
Now, you will check the database created. Open View -> SQL Server Object Explorer.
You will see the newly created database as below:
As you see, the Movie table and the Migrations History table are created automatically. Then a record is inserted into the migration history table to show the executed migrations on the database.
Creating API Controller and Methods
In this section, you will create the Movies API Controller and add the methods to it, and also will test those methods.
Let’s add the controller first. Right-click on the Controller folder and select Add -> Controller.. and then select API Controller – Empty as below:
Click Add and give a name to your controller on the next screen.
MoviesController is created as below:
As you see, the class is decorated with the [ApiController] attribute. This attribute indicates that the controller responds to web API requests.
MoviesController class inherits from ControllerBase.
Next, we will inject the database context mentioned in the previous section through the constructor of the controller. Add the following code:
Now, you will add CRUD (create, read, update, and delete) action methods to the controller. Let’s start with the GET methods.
GET Method
Add the following code to the MoviesController:
GetMovies method returns all the movies and GetMovie(int id) method returns the movie having the Id given as input. They are decorated with the [HttpGet] attribute which denotes that a method responds to an HTTP GET request.
These methods implement two GET endpoints:
- GET /api/Movies
- GET /api/Movies/{id}
You can test the app by calling the two endpoints from a browser as follows:
- https://localhost:{port}/api/movies
- https://localhost:{port}/api/movies/{id}
The return type of the GetMovie methods is ActionResult<T> type. ASP.NET Core automatically serializes the object to JSON and writes the JSON into the body of the response message. The response code for this return type is 200, assuming there are no unhandled exceptions. Unhandled exceptions are translated into 5xx errors.
Routing and URL Paths
The URL path for each method is constructed as follows:
Start with the template string in the controller’s Route attribute (Route(“api/[controller]”)). Then replace [controller] with the name of the controller, which by convention is the controller class name minus the Controller suffix. For this sample, the controller class name is MoviesController, so the controller name is movies.
ASP.NET Core routing is case insensitive.
Testing the GetMovie Method
Now you will test these endpoints. Before that, let’s insert some movie records into your table.
Go to the SQL Server Object Explorer and right-click the Movies table and select View Data:
Then add some movie records manually to the table:
You do not need to add data for the Id column as SQL Server automatically handles this for us.
Now, you can test the GET endpoints. Start (Ctlr+F5) the application:
Select the first GET method and click Try it out -> Execute:
This shows all of the movies in the application.
Next, click the second GET method and click Try it out and enter one of the Ids above in the id field and click Execute:
If no item matches the requested Id, the method returns a 404 NotFound error code.
POST Method
Add the following code to the MoviesController:
PostMovie method creates a movie record in the database. The preceding code is an HTTP POST method, as indicated by the [HttpPost] attribute. The method gets the value of the movie record from the body of the HTTP request.
The CreatedAtAction method:
- Returns an HTTP201 status code, if successful. HTTP 201 is the standard response for an HTTP POST method that creates a new resource on the server.
- Adds a Locationheader to the response. The Location header specifies the URI of the newly created movie record.
- References the GetMovieaction to create the Location header’s URI.
Testing the PostMovie Method
Start the application and then select the POST method in the Movies section.
Click Try it out and enter the movie information that you want to add in the request body:
and click Execute.
Response status code is 201 (Created) and a location header is added to the response as seen below:
You can paste this location URL in the browser and see the response there too:
Also, you can check this record from the Movies table in your local database:
PUT Method
Add the following code to the MoviesController:
PutMovie method updates the movie record with the given Id in the database. The preceding code is an HTTP PUT method, as indicated by the [HttpPut] attribute. The method gets the value of the movie record from the body of the HTTP request. You need to supply the Id both in the request URL and the body and they have to match. According to the HTTP specification, a PUT request requires the client to send the entire updated entity, not just the changes.
The response is 204 (No Content) if the operation is successful.
Testing the PutMovie Method
Start the application and then select the PUT method in the Movies section.
Click Try it out and enter the movie information that you want to update in the request body and the Id of the movie in the id field:
and then click Execute.
We can check the updated state of the movie from GET method with Id in the Swagger UI or directly from the browser as below:
We can see the updated info in the database as well:
If you try to update a record that does not exist in the database you get 404 Not Found error:
DELETE Method
Add the following code to the MoviesController:
DeleteMovie method deletes the movie record with the given Id in the database. The preceding code is an HTTP DELETE method, as indicated by the [HttpDelete] attribute. This method expects Id in the URL to identify the movie record we want to delete.
Testing the DeleteMovie Method
Start the application and then select the DELETE method in the Movies section.
Click Try it out and enter the Id of the movie you want to delete in the id field:
and then click Execute.
We do not need to supply a request body as you might have noticed. The response status is 204 No Content.
If you try to get this movie record using the browser you get 404 Not Found error as expected:
You can check as well from the database that the record is deleted:
For more information and to develop a website using ASP.NET, Hire .NET Developer from us as we give you a high-quality product by utilizing all the latest tools and advanced technology. E-mail us any clock at – hello@hkinfosoft.com or Skype us: “hkinfosoft”.
To develop a Website using ASP.NET, please visit our technology page.
Content Source:
- medium.com
ASP.NET Core Features in .NET 7
It is no news that Microsoft is working very hard on improving and bringing new features to the .NET framework or to its C# programming language. This time Microsoft is targeting web development and is focusing on ASP.NET Core, which will apparently come hand in hand with the .NET 7 version.
Some time ago Microsoft released Preview 1 of ASP.NET Core on .NET 7 and the amount of new features is great, so let’s see the new features!
New Minimal API Improvements
The first of the new features will bring improvements in minimal APIs, especially in IFormFile and IFormCollection. With this new improvement you will be able to use IFormFileand IFormCollection to handle and manage file uploads in a much easier way.
Microsoft warns that if you want to use these new functions with authentication, anti-forgery is required, but so far Microsoft has not implemented such support. However, they reassure us that it is on the roadmap of .NET 7.
Support for such requests with client certificates or cookie headers is currently inactive. Let’s take a look at the example provided by Microsoft to see this new ASP.NET Core feature in action:
The next new enhancement for the minimal APIs in ASP.NET Core comes for Steam and PipeRider.
To understand in what kind of scenario these new minimal APIs would be used, let’s imagine that we need to store data in a blob storage or queue it in some queue provider like Azure. In this case we can use Steam and PipeRider to bind the body of a request and later process it in the cloud.
However, Microsoft warns us three details to achieve a correct functioning of these minimal APIs:
- The Streamwill always be the same object as Body when ingesting any type of data.
- The Streamcannot be read again more than once (not rewindable) since by default the request body is not stored in the buffer.
- As the underlying buffers will end up being reused and discarded, both Streamand PipeRider cannot be used outside of the action handler.
The last improvement in the minimal APIs that Microsoft brings in this Preview 1 is about JSON configuration. Through ConfigureRouteHandlerJsonOptions we will be able to manually configure the options and settings of the minimal API endpoints using JSON.
This improvement has been introduced mainly, as Microsoft says, to avoid confusion with Microsoft.AspNetCore.Mvc.JsonOptions.
New client source generator for SignalR
This is the next new feature that ASP.NET Core will bring in .NET 7. This new source code generator for SignalR introduced by Microsoft has the ability to generate code (both sending and receiving) strongly typed based on developer-defined interfaces.
This especially applies to SignalR hub interfaces, there would be no need to use them in loosely-typed methods, we now have the option to reuse them in the client. At the same time, there is the possibility of implementing an interface that contains the methods and at the same time the client can take advantage of that interface to call any method that is part of the hub.
The good thing is that Microsoft has let us see the use and operation of this new SignalR generator. Let’s see how Microsoft uses it:
- First you need to add a reference to AspNetCore.SignalR.Client.SourceGenerator.
- Then the following classes must be added to the project: HubClientProxyAttributeand HubServerProxyAttribute :
The next step is to add a static partial class and write the following static partial methods together with the attributes HubServerProxy and HubClientProxy in this way:And finally, we would use the partial methods and that’s it:That’s it, that’s how easy it is to use the new SignalR client source generator.
Razor Pages and MVC views with nullable models
We continue with the next improvement brought by Microsoft. This time they have focused on improving the user experience of the checks and for this, they have implemented the nullable view for the checks that are made of null state of any ASP.NET Core application. In this case this is the example that Microsoft provides us:
Unfortunately there are no further examples or use cases for this new feature. Hopefully Microsoft will continue to release new features and talk more about the ones already revealed.
Validate errors with JSON property names
Thanks to this new ASP.NET feature you will be able to manually configure with “SystemTextJsonValidationMetadataProvider” the validation to use the JSON property names.
Previously as the names of the properties that a model has, commonly were implementation details, managing them from a single page application was difficult.
If you want to know more about this feature, I recommend you, as always, to consult the original source: Use JSON property names in validation errors
Injection services in Blazor
Injecting services into Blazor? attributes Yes, thanks to this improvement you will be able to inject almost any type of service into custom validation attributes. To do so, the ValidationContext will be configured by Blazor to be used as a service provider.
For more information and to develop a website using ASP.NET, Hire .NET Developer from us as we give you a high-quality product by utilizing all the latest tools and advanced technology. E-mail us any clock at – hello@hkinfosoft.com or Skype us: “hkinfosoft”.
To develop a Website using Vue.js, please visit our technology page.
Content Source:
- medium.com