Using IOptions with .NET 6 API Endpoints
IOptions
are a great way to pass configuration information around an application.
Here is a simple example of using them with the .NET Minimal API endpoints. The code doesn’t need much explanation.
Create a new webapi application -
dotnet new webapi --name IOptionsInApiEndpoint
Replace the code in Program.cs with -
1using Microsoft.Extensions.Options;
2
3var builder = WebApplication.CreateBuilder(args);
4
5builder.Services.AddOptions<ApplicationOptions>()
6 .BindConfiguration(""); // reads the whole appsettings.json
7
8builder.Services.AddOptions<SubSection>()
9 .BindConfiguration("SubSection"); // reads only the "SubSection" in appsettings.json
10
11var app = builder.Build();
12
13app.MapGet("/", (IOptions<ApplicationOptions> options) =>
14{
15 ApplicationOptions applicationOptions = options.Value;
16
17 return $"Name:{applicationOptions.Name}, Size:{applicationOptions.Size}, " +
18 $"SubSectionName:{applicationOptions.SubSection.SubSectionName}, " +
19 $"SubSectionId:{applicationOptions.SubSection.SubSectionId}";
20});
21
22app.MapGet("/subsection", (IOptions<SubSection> options) =>
23{
24 SubSection subSectionOptions = options.Value;
25
26 return $"SubSectionName:{subSectionOptions.SubSectionName}, " +
27 $"SubSectionId:{subSectionOptions.SubSectionId}";
28});
29
30app.Run();
31
32public class ApplicationOptions
33{
34 public string Name { get; set; }
35 public int Size { get; set; }
36 public SubSection SubSection { get; set; }
37}
38
39public class SubSection
40{
41 public string SubSectionName { get; set; }
42 public int SubSectionId { get; set; }
43}
Open appsettings.json
and replace the content with -
{
"Name": "ABC",
"Size": 11,
"SubSection": {
"SubSectionName": "DEF",
"SubSectionId": 22
}
}