Não tenho certeza do que estou perdendo aqui, mas não consigo obter os valores do meu appsettings.json no meu aplicativo principal .net. Eu tenho meu appsettings.json como:
{
"AppSettings": {
"Version": "One"
}
}
Comece:
public class Startup
{
private IConfigurationRoot _configuration;
public Startup(IHostingEnvironment env)
{
_configuration = new ConfigurationBuilder()
}
public void ConfigureServices(IServiceCollection services)
{
//Here I setup to read appsettings
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
}
}
Modelo:
public class AppSettings
{
public string Version{ get; set; }
}
Controlador:
public class HomeController : Controller
{
private readonly AppSettings _mySettings;
public HomeController(IOptions<AppSettings> settings)
{
//This is always null
_mySettings = settings.Value;
}
}
_mySettings
é sempre nulo. Há algo que estou perdendo aqui?
c#
asp.net-core
asp.net-core-mvc
um homem
fonte
fonte
Respostas:
Classe de programa e inicialização
.NET Core 2.x
Você não precisa ser novo
IConfiguration
noStartup
construtor. Sua implementação será injetada pelo sistema DI..NET Core 1.x
Você precisa informar
Startup
para carregar os arquivos de configurações de aplicativos.Obtendo valores
Há várias maneiras de obter o valor que você define nas configurações do aplicativo:
ConfigurationBuilder.GetValue<T>
Digamos que sua
appsettings.json
aparência seja assim:Maneira simples
Você pode injetar toda a configuração no construtor de seu controlador / classe (via
IConfiguration
) e obter o valor desejado com uma chave especificada:Padrão de Opções
O
ConfigurationBuilder.GetValue<T>
funciona muito bem se você só precisa de um ou dois valores de configurações do aplicativo. Mas se você deseja obter vários valores das configurações do aplicativo ou não deseja codificar essas cadeias de caracteres em vários locais, pode ser mais fácil usar o Padrão de Opções . O padrão de opções usa classes para representar a hierarquia / estrutura.Para usar o padrão de opções:
IOptions<T>
no construtor do controlador / classe em que você deseja obter valores1. Defina classes de configuração para representar a estrutura
Você pode definir classes com propriedades que precisam corresponder exatamente às chaves nas configurações do seu aplicativo. O nome da turma não precisa corresponder ao nome da seção nas configurações do aplicativo:
2. Registre a instância de configuração
E então você precisa registrar esta instância de configuração
ConfigureServices()
na inicialização:3. Injete IOptions
Por fim, no controlador / classe que você deseja obter os valores, é necessário injetar
IOptions<AppIdentitySettings>
através do construtor:fonte
IOptionsSnapshot<T>
vez deIOptions<T>
. Você pode dar uma olhada neste artigo: offer.solutions/blog/articles/2017/02/17/… . Eu ainda não tive chance de tentar.Basta criar um arquivo AnyName.cs e colar o seguinte código.
Deve substituir o nome do arquivo YouAppSettingFile.json pelo seu nome do arquivo.
Seu arquivo .json deve se parecer com abaixo.
Agora você pode usá-lo.
Não se esqueça de adicionar referência em sua classe onde você deseja usar.
Código para recuperar valor.
fonte
Adicionando à resposta de David Liang para o Core 2.0 -
appsettings.json
os arquivos estão vinculados àASPNETCORE_ENVIRONMENT
variávelASPNETCORE_ENVIRONMENT
pode ser configurado para qualquer valor, mas três valores são suportados pela estrutura:Development
,Staging
, eProduction
. SeASPNETCORE_ENVIRONMENT
não estiver definido, o padrão seráProduction
.Para esses três valores, esses arquivos appsettings.ASPNETCORE_ENVIRONMENT.json são suportados imediatamente -
appsettings.Staging.json
,appsettings.Development.json
eappsettings.Production.json
Os três arquivos json de configuração de aplicativo acima podem ser usados para configurar vários ambientes.
Exemplo -
appsettings.Staging.json
Use
Configuration["config_var"]
para recuperar qualquer valor de configuração.fonte
appsettings.json
+appsettings.{env.EnvironmentName}.json
. Portanto, a declaração de que o ASP.NET Core carrega apenas arquivos appsettings.json de desenvolvimento, armazenamento temporário e produção está incorreta no momento.ASPNETCORE_ENVIRONMENT
toda vez? As coisas foram maneira mais fácil em .Net 4. Estes fanáticos JSON fez estragar tudo grande momentoEu acho que a maneira mais simples é por DI. Um exemplo de como acessar o Controller.
fonte
services.AddSingleton(Configuration);
, agora funciona #No construtor da classe Startup, você pode acessar appsettings.json e muitas outras configurações usando o objeto IConfiguration injetado:
Construtor Startup.cs
Conteúdo de appsettings.json
fonte
fonte
No meu caso, era simples como usar o método Bind () no objeto Configuration. E adicione o objeto como singleton no DI.
O objeto Instrução pode ser tão complexo quanto você desejar.
fonte
Para o ASP.NET Core 3.1, você pode seguir este guia:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Ao criar um novo projeto do ASP.NET Core 3.1, você terá a seguinte linha de configuração
Program.cs
:Isso permite o seguinte:
Isso significa que você pode injetar
IConfiguration
e buscar valores com uma chave de cadeia, mesmo valores aninhados. GostarIConfiguration["Parent:Child"];
Exemplo:
appsettings.json
WeatherForecast.cs
fonte
IConfiguration["Parent:Child"]
sintaxe?Eu acho que a melhor opção é:
Crie uma classe de modelo como esquema de configuração
Registre-se no DI: services.Configure (Configuration.GetSection ("democonfig"));
Obtenha os valores como objeto de modelo de DI em seu controlador:
fonte
Do núcleo 2.2 do Asp.net para cima, você pode codificar da seguinte forma:
Etapa 1. Crie um arquivo de classe AppSettings.
Este arquivo contém alguns métodos para ajudar a obter valor por chave do arquivo appsettings.json. Veja o código abaixo:
Etapa 2. Configuração inicial do objeto AppSettings
Precisamos declarar e carregar o arquivo appsettings.json quando o aplicativo é iniciado e carregar as informações de configuração do objeto AppSettings. Faremos esse trabalho no construtor do arquivo Startup.cs. Observe a linha
AppSettings.Instance.SetConfiguration(Configuration);
Ok, agora eu tenho um arquivo appsettings.json com algumas teclas, como abaixo:
Etapa 3. Leia o valor de configuração de uma ação
Faço da demo uma ação no controlador Home, como abaixo:
E abaixo está o resultado:
Clique para ver o resultado
Para obter mais informações, consulte o artigo obter valor de appsettings.json no núcleo do asp.net para obter um código mais detalhado.
fonte
É simples: em appsettings.json
No arquivo .cs:
fonte