Невозможно получить доступ к значениям appsettings.json в веб-API .NET Core 6

Я перехожу с .NET Core 5.0 на 6.0.

Следующий фрагмент кода прекрасно работает в версии 6.0.

builder.Services.AddDbContext<QuoteCMSContext>(options =>
        options.UseSqlite("Data Source=quotesdatabase.db"));

Теперь, в моем старом проекте 5.0, у меня было что-то подобное.

    //database context
    services.AddDbContext<QuoteCMSContext>(options =>
                options.UseSqlite(Configuration["SqliteConnectionString"]));

Я посмотрел на все эти другие вопросы, которые, похоже, касаются моей проблемы.

ASP.NET Core 6, как получить доступ к конфигурации во время запуска

Получение значения из appsettings.json в ядре .net

ConnectionString в .NET Core 6

В конце концов, я придумал это.

builder.Services.AddDbContext<QuoteCMSContext>(options =>
        options.UseSqlite(builder.Configuration["SQLiteConnectionString"]));

и это

builder.Services.AddDbContext<QuoteCMSContext>(options =>
        options.UseSqlite(builder.Configuration.GetConnectionString("SQLiteConnectionString")));

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

Вот мой appsettings.json, на всякий случай.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "SQLiteConnectionString": "Data Source=quotesdatabase.db",
  "AzureSqlServerConnectionString": "Server=tcp:.database.windows.net,1433;Initial Catalog=DBName;Persist Security Info=False;User ID=;Password=;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
  "CorsOriginLocalHost": "http://localhost:3000",
  "CorsOriginStaging": "https://randomstuffreactjsappzeropoint4.azurewebsites.net",
  "CorsOriginProduction": "https://randomstuffreactjsappzeropoint4.azurewebsites.net",
  "ConnectionStrings": {
    "SQLiteConnectionString": "Data Source=quotesdatabase.db"
  }
}

Обновление 1:

Я заметил нечто странное. Следующий код не вызывает ошибок. На самом деле, извините, я еще не вводил cors в свой код. Это также дает ту же нулевую ошибку. Итак, да, на данный момент определенно не в состоянии прочитать информацию из appsettings.json

builder.Services.AddCors(cors =>
        {
            cors.AddDefaultPolicy( policy =>
            {
                policy.WithOrigins(builder.Configuration["CorsOriginLocalHost"],
                                    builder.Configuration["CorsOriginStaging"],
                                    builder.Configuration["CorsOriginProduction"]);
    
    
                //policy.WithOrigins("http://localhost:3000",
                //                    "http://localhost:3000"
                //                    );
                policy.AllowAnyMethod();
                policy.AllowAnyHeader();
                policy.AllowCredentials();
            }
                );
        }
    );

Обновление 2:

Хорошо, я нашел проблему. Я изменил «Рабочий каталог» во время отладки SQLite. Таким образом, код продолжал искать файл appsettings.json не в том месте. Я установил папку проекта вручную. Раньше я делал этот шаг в .NET 5.0.

Похоже, это не требуется в .NET 6.0.

Я вернулся к свойствам проекта и удалил путь, который я установил. сделал его пустым. Теперь можно читать appsettings.json.

Можете ли вы предоставить дополнительную информацию о том, как вы запускаете приложение. Также проверьте в опубликованной папке, скопирован ли файл appsettings или нет?

Durga Prasad 19.03.2022 12:17

1. appsettings.json настроен на копирование для вывода. 2. Просто запускаю как обычно. шаблон проекта dot net core по умолчанию. Я ничего не модифицировал.

Jay 20.03.2022 05:11

Похоже, ответ принят. Можете ли вы сообщить нам, как проблема была решена?

Durga Prasad 20.03.2022 08:42

В итоге я использовал комбинацию моего обновления 2 выше в моем вопросе и ответа, опубликованного ниже, в качестве окончательного решения :)

Jay 20.03.2022 09:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
"ConnectionStrings": {
      "ToDoItemsDatabase": "Server=JOHANDRE\\SQL2017; Database=ToDoItems; User=xxx; Password=xxx;"
  },

как показано в ConnectionString в .NET Core 6

действительно отличается от этого:

"SQLiteConnectionString": "Data Source=quotesdatabase.db"

Попробуйте использовать это в своем appsettings.json:

"ConnectionStrings": {
    "SQLiteConnectionString": "Data Source=quotesdatabase.db"
  }

Это не имело значения. Я не знаю, в чем проблема. Почему Microsoft постоянно меняет вещи, которые работают с каждой версией, мне не понятно :(

Jay 19.03.2022 10:21

В моем тесте я получил строку подключения с помощью builder.Configuration.GetConnectionString("SQLiteConnectionS‌​tring"), поэтому вам потребуется некоторая отладка, чтобы увидеть, какой следующий шаг не работает.

Luuk 19.03.2022 10:25

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

Jay 19.03.2022 10:29

Так что нет, дело не только в SQLite. Я также не могу читать из других полей.

Jay 19.03.2022 10:58

эта проблема не имеет ничего общего с настройкой чтения из appsettings.json. Вы могли бы проверить это, проверив значения, возвращенные из builder.Configuration.GetDebugView() (см.: GetDebugView)

Luuk 19.03.2022 11:23

Да, значения appsettings.json определенно не загружаются и не отображаются в представлении отладки. Я не понимаю, что я делаю неправильно :(

Jay 20.03.2022 05:00

Другие вопросы по теме