Правильный синтаксис для вызова значений из appsettings. json вместо использования буквальной строки - PullRequest
0 голосов
/ 04 августа 2020

Несмотря на то, что на эту тему здесь есть множество тем, те, которые я просмотрел, не касались моих конкретных потребностей.

ASP. NET Веб-приложение Core 3.1:

У меня есть метод C#, который выглядит так:

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace ClientsUI.Data
{
    public class ClientsService
    {
        private readonly ClientsDbContext _context;
        private readonly IConfiguration _iconfiguration;

        public ClientsService(ClientsDbContext context, IConfiguration iconfiguration)
        {
            _context = context;
            _iconfiguration = iconfiguration;
        }
    

        public async Task<List<BillingCodes>>
        GetBillingCodesNameTestAsync()

        {
        return await _context.BillingCodes.Where(c => c.Name.Contains("Test") && c.ClientId.ToString() != "ABC123")
              .AsNoTracking()
              .ToListAsync();
        }
     }   
  }

И appsettings.json выглядит так:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },

  "ConnectionStrings": {
    "DefaultConnection": "myconnectionstring"

  },

  "SqlFilters": {
    "NameFilter": "Test",
    "ClientIdFilter": "ABC123"
  }
}

В методе GetBillingCodesNameTestAsync я нужно заменить «Test» и «ABC123» вызовом файла appsettings.json, что-то вроде Configuration.GetSqlFilters..., которое я не могу заставить работать должным образом, отсюда и мой пост.

Ответы [ 2 ]

3 голосов
/ 04 августа 2020

Я бы использовал строго типизированный интерфейс, доступный в IConfiguration.

class SqlFilters {
  string NameFilter { get; set; }
  string ClientIdFilter { get; set; }
}

, а затем использовал

var sqlFilters = _iconfiguration.GetSection("SqlFilters").Get<SqlFilters>();

Тогда доступ к вашим переменным так же прост, как доступ к свойствам в классе (то есть sqlFilters.NameFilter и sqlFilters.ClientIdFilter соответственно).

0 голосов
/ 04 августа 2020
return await _context.BillingCodes.Where(c => c.Name.Contains(_iconfiguration["SqlFilters:NameFilter"]) && c.ClientId.ToString() != _iconfiguration["SqlFilters:ClientIdFilter"])
              .AsNoTracking()
              .ToListAsync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...