Вызов API .NET Core для метода в проекте .NET означает, что он не может найти строки подключения в файле app.config

#c# #.net #.net-core

Вопрос:

У меня есть основной проект API, который первоначально получал доступ к базе данных с контроллера (плохая практика), поэтому я перенес методы доступа к данным в существующий .Библиотека сетевых классов, в которой строки подключения хранятся в файле app.config. Те же строки подключения также расположены в папках appsettings.json/appsettings.development.json проекта Core API.

Затем я попытался получить доступ к этому новому методу библиотеки классов .NET (содержащему вызов базы данных) из моего API, но я получаю ошибку «не удается найти имя строки подключения «в app.config». Я новичок в .NET, но коллега сказал, что, возможно, файл app.config не помещается в папку bin API. У кого-нибудь были проблемы с проектами .NET Core, которые пытались связаться со строками подключения проекта .NET, и как я мог бы устранить эту проблему?

1.) Я попытался вставить файл app.config в папку bin API, но безрезультатно (та же ошибка).

Я видел несколько ответов на SO, но не смог их успешно реализовать, поэтому приношу свои извинения, если на этот вопрос уже отвечали раньше.

Комментарии:

1. Создайте App.config web.config файл или в проекте API и добавьте в него строки подключения, пожалуйста, обратитесь к этому docs.microsoft.com/en-us/visualstudio/ide/…

2. Я тоже это видел. Можно ли это добавить в основной проект? Нужно ли мне удалять appsettings.json?

3. Пожалуйста, покажите код, в котором вы получили ошибку.

4. app.config и web.config-это платформа dotnet, а не ядро dotnet.

5. Да, это совершенно нормально для добавления app.config файла, и вы не должны удалять файл appsettings.json. Кроме того, я рекомендую добавить библиотеку классов .net core вместо библиотеки .net framework

Ответ №1:

Вам нужно полностью отказаться от вашего понимания настроек конфигурации в рамках dot-net.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0

Обратите внимание на значение URL-адреса.

базовая конфигурация ядра aspnet

В DotNet-ядре: Настоятельно рекомендую создать объект первого класса. (конфигурация-держатель значения-poco)

И в ваших регистрациях Ioc введите poco держателя значения конфигурации в Ioc (он же «коллекция услуг» в dn-core).

А затем конструктор введет ваши настройки в держатель poco.

В соответствии со статьей.

Json «раздел»

   "Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }
 

Первоклассная конфигурация-держатель значения-poco.

 public class PositionOptions
{
    public const string Position = "Position";

    public string Title { get; set; }
    public string Name { get; set; }
}
 

Регистрация МоК.

     public void ConfigureServices(IServiceCollection services)
{
    services.Configure<PositionOptions>(Configuration.GetSection(
                                        PositionOptions.Position));
  
}
 

Инъекция Конструктора:

 public class Test2Model : PageModel
{
    private readonly PositionOptions _options;

    public Test2Model(IOptions<PositionOptions> options)
    {
        _options = options.Value;
    }

    public ContentResult OnGet()
    {
        return Content($"Title: {_options.Title} n"  
                       $"Name: {_options.Name}");
    }
}
 

и теперь вы можете воспользоваться встроенными опциями «частота обновления» для того, как они обрабатываются.

https://medium.com/@kmar.ayush/eli5-ioptions-vs-ioptionssnaphot-vs-ioptionsmonitor-fab1d7e26a75

IOptions против IOptionsSnaphot против IOptionsМонитор