Does it make sense to use init only setters on request models in an asp net core


When developing web applications using ASP.NET, one common question that arises is whether it to use init-only setters on request models in ASP.NET Core. In this article, we will explore this question and provide examples to help clarify the concept.

Understanding Init-Only Setters

Init-only setters are a new feature introduced in C# 9.0. They allow you to set the of a property only during object initialization. Once the object is created, the property becomes read-only and cannot be modified. This can be useful in scenarios where you want to ensure immutability and prevent accidental modification of properties.

Benefits of Using Init-Only Setters

There are several benefits to using init-only setters on request models in ASP.NET Core:

  • Immutability: By using init-only setters, you can ensure that the properties of your request models are immutable. This can help prevent unintended modifications and make your code more robust.
  • Thread Safety: Immutable objects are inherently thread-safe. By making your request models immutable, you can avoid potential concurrency that may arise when multiple threads access and modify the same object simultaneously.
  • Code Clarity: By explicitly marking properties as read-only, you make it clear to other developers that these properties should not be modified after object initialization. This can improve code and reduce the chances of introducing bugs.

Example: Using Init-Only Setters in ASP.NET Core

Let's consider a simple example where we have a request model for creating a new user:

public class CreateUserRequest
    public  Username { get; init; }
    public string Password { get; init; }
    public string Email { get; init; }

In this example, we have defined a CreateUserRequest class with three properties: Username, Password, and Email. By using the init keyword, we ensure that these properties can only be set during object initialization.

Now, let's see how we can use this request model in an ASP.NET Core :

public IActionResult CreateUser(CreateUserRequest request)
    // Process the request and  a new user
    // ...
    return Ok();

In this example, the CreateUser action method takes a CreateUserRequest object as a parameter. Since the properties of the request model are read-only after initialization, we can be confident that the values passed in the request will not be modified during the processing of the action.


Using init-only setters on request models in ASP.NET Core can bring several benefits, immutability, thread safety, and improved code clarity. By ensuring that properties can only be set during object initialization, you can make your code more robust and less prone to bugs. Consider using init-only setters in your ASP.NET Core to enhance the reliability and maintainability of your code.

Rate this post

Leave a Reply

Your email address will not be published. Required fields are marked *

Table of Contents