0

I have an Azure Function and a PostreSQL DB in Azure Cloud.

enter image description here

From my Azure Function I want to access the Connection String, let's call it IT-PostgreSQL.

This is my Azure Function:

namespace InjectClaimsTokenFunc
{
    public class InjectClaims
    {
        private readonly ILogger<InjectClaims> _logger;
        private readonly DataContext _context;

        public InjectClaims(ILogger<InjectClaims> logger, DataContext context)
        {
            _logger = logger;
            _context = context;
        }

        [Function("InjectClaimsFunc")]
        public async Task<IActionResult> RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
        {
            string username = Environment.GetEnvironmentVariable("BASIC_AUTH_USERNAME", EnvironmentVariableTarget.Process);
            _logger.LogInformation($"Username: {username}");

            string password = Environment.GetEnvironmentVariable("BASIC_AUTH_PASSWORD", EnvironmentVariableTarget.Process);
            _logger.LogInformation($"Password: {password}");

            var connectionString = Environment.GetEnvironmentVariable("CUSTOMCONNSTR_IT-PostgreSQL") ?? "Not found";
            _logger.LogInformation($"ConnectionString: {connectionString}");
        }
    }
}

I can retrieve get the BASIC_AUTH_USERNAME and BASIC_AUTH_PASSWORD from the Application Settings.

I always get "Not found" for the connection string now matter how I try to retrieve it. How can I retrieve the connection string from Connection strings? The connection string has a value set in Azure.

1 Answer 1

0

You should be able to read it using IConfiguration.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

namespace InjectClaimsTokenFunc
{
    public class InjectClaims
    {
        private readonly ILogger<InjectClaims> _logger;
        private readonly DataContext _context;
        private readonly IConfiguration _configuration;

        // Modified constructor to include IConfiguration
        public InjectClaims(ILogger<InjectClaims> logger, DataContext context, IConfiguration configuration)
        {
            _logger = logger;
            _context = context;
            _configuration = configuration;
        }

        [Function("InjectClaimsFunc")]
        public async Task<IActionResult> RunAsync([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
        {

            string username = _configuration["BASIC_AUTH_USERNAME"];
            _logger.LogInformation($"Username: {username}");

            string password = _configuration["BASIC_AUTH_PASSWORD"];
            _logger.LogInformation($"Password: {password}");

            var connectionString = _configuration.GetConnectionString("IT-PostgreSQL") ?? "Not found";
            _logger.LogInformation($"ConnectionString: {connectionConnectionString}");


            return new OkResult();
        }
    }
}

Then, to enable IConfiguration injection, you need to configure the DI container in a Startup class as follows:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

[assembly: FunctionsStartup(typeof(InjectClaimsTokenFunc.Startup))]

namespace InjectClaimsTokenFunc
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddSingleton<IConfiguration>((s) =>
            {
                return new ConfigurationBuilder()
                    .AddEnvironmentVariables()
                    .Build();
            });


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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.