2

I'm trying to find a simple way to access a value from the configuration of a .NET 6, ASP.NET Core Web App, in a Razor page's .cs file, using Visual Studio 2022. There's a lot of examples of how to do this online the old way. I'm trying to get up to speed with ASP.NET Core, and .NET 6, and I don't want to use the old techniques.

Right now I can connect to a SQLite database with a very simple configuration. Here's the code in my Index.cshtml.cs file,

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
using System.Data.SQLite;

namespace Something.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }

        public void OnGet()
        {
            var cnnStrBuilder = new SQLiteConnectonStringBuilder();
            cnnStrBuild.DataSource = "DBFile.SQLite";
            using (SQLiteConnection cnn = new(cnnStrBuilder.ConnectionString))
            {
                cnn.Open();
                ...
            }
        }
    }
}

This works. I can read and display data without the need for a DBContext, or EntityFramework, or anything else. All I want to change is to get the connection string from the appsettings.json file. My appsettings.json looks like this,

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "MyConStr" : "DBFile.SQLite"
  },
  "AllowedHosts": "*"
}

in my Program.cs file is the builder object, which I could use to get the configuration.

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();

but how do I get access to the builder object in the Razor page's .cs file so I can get to the configuration? .NET 6 is supposed to make things like this easier, I thought. BTW, I purposefully left 'connection string' out of the title of this post because I feel like this should be a generic thing. It shouldn't be so hard to retrieve a string value from the configuration settings from anywhere in the application. What am I missing?

1 Answer 1

1

You can inject an instance of IConfiguration in your PageModel which you can use to access appsettings.json values.

public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    private readonly IConfiguration _configuration;

    public IndexModel(ILogger<IndexModel> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    public void OnGet()
    {
        var cnnStrBuilder = new SQLiteConnectonStringBuilder();
        cnnStrBuild.DataSource = _configuration.GetConnectionString("MyConStr");
        using (SQLiteConnection cnn = new(cnnStrBuilder.ConnectionString))
        {
            cnn.Open();
            ...
        }
    }
}

You can also check this article for more info: https://www.learnrazorpages.com/configuration/

Sign up to request clarification or add additional context in comments.

1 Comment

That's exactly what I was missing!!! And it was certainly easy. Thx!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.