He configurado mis datos de AppSettings en el archivo appsettings / Config .json de esta manera:
{
"AppSettings": {
"token": "1234"
}
}
He buscado en línea cómo leer los valores de AppSettings del archivo .json, pero no pude obtener nada útil.
Lo intenté:
var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
Sé que con ASP.NET 4.0 puedes hacer esto:
System.Configuration.ConfigurationManager.AppSettings["token"];
Pero, ¿cómo hago esto en ASP.NET Core?
c#
.net
asp.net-core
.net-core
Oluwafemi
fuente
fuente
Respuestas:
Esto ha tenido algunos giros y vueltas. He modificado esta respuesta para estar al día con ASP.NET Core 2.0 (a partir del 26/02/2018).
Esto se toma principalmente de la documentación oficial :
Para trabajar con la configuración en su aplicación ASP.NET, se recomienda que solo cree una instancia
Configuration
en laStartup
clase de su aplicación . Luego, use el patrón Opciones para acceder a configuraciones individuales. Digamos que tenemos unappsettings.json
archivo que se ve así:Y tenemos un objeto POCO que representa la configuración:
Ahora construimos la configuración en
Startup.cs
:Tenga en cuenta que
appsettings.json
se registrará de forma predeterminada en .NET Core 2.0. También podemos registrar unappsettings.{Environment}.json
archivo de configuración por entorno si es necesario.Si queremos inyectar nuestra configuración a nuestros controladores, necesitaremos registrarla con el tiempo de ejecución. Lo hacemos a través de
Startup.ConfigureServices
:Y lo inyectamos así:
La
Startup
clase completa :fuente
"1.0.0-beta4"
funciona en la mía"1.0.0-alpha4"
. ¡Muchas gracias!Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<....Settings>'
Microsoft.Extensions.Options.ConfigurationExtensions
funcionó como se esperaba.En primer lugar: el nombre del ensamblado y el espacio de nombres de Microsoft.Framework.ConfigurationModel ha cambiado a Microsoft.Framework.Configuration. Entonces deberías usar: ej.
como una dependencia en
project.json
. Use beta5 o 6 si no tiene 7 instalados. Entonces puedes hacer algo como esto enStartup.cs
.Si luego desea recuperar una variable de config.json, puede obtenerla de inmediato usando:
o puede crear una clase llamada AppSettings como esta:
y configura los servicios de esta manera:
y luego acceda a través de, por ejemplo, un controlador como este:
fuente
Configuration.Get<AppSettings>()
para deserializar todo el archivo en lugar de una sección específica.Para .NET Core 2.0, las cosas han cambiado un poco. El constructor de inicio toma un objeto de configuración como parámetro, por lo que
ConfigurationBuilder
no se requiere el uso de. Aquí esta el mio:Mi POCO es el
StorageOptions
objeto mencionado en la parte superior:Y la configuración es en realidad una subsección de mi
appsettings.json
archivo, llamadaAzureStorageConfig
:Lo único que voy a añadir es que, dado que el constructor ha cambiado, no he probado si las necesidades adicionales que se haga algo para que se cargue
appsettings.<environmentname>.json
en contraposición aappsettings.json
.fuente
public HomeController(IOptions<StorageOptions> settings)
, recibo este mensaje de error: Los tipos complejos vinculados al modelo no deben ser abstractos o de valor y deben tener un constructor sin parámetros.Con .NET Core 2.2, y de la manera más simple posible ...
appsettings.json
se carga automáticamente y está disponible mediante el constructor o la inyección de acción, y también hay unGetSection
métodoIConfiguration
activado. No hay necesidad de alterarStartup.cs
oProgram.cs
si todo lo que necesita esappsettings.json
.fuente
var myValue = config["MyKey"]
Si solo desea obtener el valor del token, use
Configuration["AppSettings:token"]
fuente
.NET Core 3.0
¡Quizás no sea la mejor manera de obtener un valor de appsettings.json , pero es simple y funciona en mi aplicación!
Archivo appsettings.json
Controlador:
En la parte superior :
En su código:
fuente
Lo siguiente funciona para aplicaciones de consola;
Instale los siguientes paquetes NuGet (
.csproj
);Crear
appsettings.json
a nivel raíz. Haga clic derecho sobre él y "Copiar al directorio de salida" como " Copiar si es más reciente ".Archivo de configuración de muestra:
Program.cs
configurationSection.Key
yconfigurationSection.Value
tendrá propiedades de configuración.fuente
Para .NET Core 2.0, puede simplemente:
Declare sus pares clave / valor en appsettings.json:
Inyecte el servicio de configuración en startup.cs y obtenga el valor utilizando el servicio
fuente
Dudo que sea una buena práctica, pero funciona localmente. Actualizaré esto si falla cuando publico / despliegue (en un servicio web IIS).
Paso 1: agregue este ensamblaje a la parte superior de su clase (en mi caso, clase de controlador):
Paso 2: agrega esto o algo similar:
Paso 3: llame al valor de su clave haciendo esto (devuelve una cadena):
fuente
appsettings.json
esté en el directorio correctoSolo para complementar la respuesta de Yuval Itzchakov.
Puede cargar la configuración sin la función de generador, simplemente puede inyectarla.
fuente
Además de respuestas existentes que me gustaría mencionar que a veces puede ser útil disponer de métodos de extensión de
IConfiguration
por razones de simplicidad.Mantengo la configuración JWT en appsettings.json para que mi clase de métodos de extensión tenga el siguiente aspecto:
Le ahorra muchas líneas y simplemente escribe código limpio y mínimo:
También es posible registrar la
IConfiguration
instancia como singleton e inyectarla donde lo necesite. Utilizo el contenedor Autofac de la siguiente manera:Puede hacer lo mismo con la inyección de dependencia de MS:
fuente
¡Aquí está el caso de uso completo para ASP.NET Core!
articulos.json
ArticleContainer.cs
Startup.cs
Index.cshtml.cs
Index.cshtml.cs
fuente
Siguen cambiando las cosas: acaban de actualizar Visual Studio y de tener todo el proyecto bomba, en camino a la recuperación y la nueva forma se ve así:
¡Me faltaba esta línea!
fuente
They just keep changing things
. Esta. Casi todas las respuestas en esta página solo se aplican a una versión específica de .Net Core..NET Core 2.1.0
3. Instale las siguientes dependencias:
4. Luego, IMPORTANTE: haga clic derecho en el archivo appsettings.json -> haga clic en Propiedades -> seleccione Copiar si es más reciente:
Finalmente, puedes hacer:
config ["clave1"]
Teniendo en cuenta que mi archivo de configuración se verá así:
fuente
Puedes probar el siguiente código. Esto es trabajo para mí.
Aquí he creado una clase para obtener la cadena de conexión y la configuración de la aplicación.
I Startup.cs necesita registrar la clase como se muestra a continuación.
fuente
Para ASP.NET Core 3.1 puede seguir esta documentación:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Cuando cree un nuevo proyecto ASP.NET Core 3.1, tendrá la siguiente línea de configuración en
Program.cs
:Esto permite lo siguiente:
Esto significa que puede inyectar
IConfiguration
y recuperar valores con una clave de cadena, incluso valores anidados. Me gustaIConfiguration ["Parent:Child"];
Ejemplo:
appsettings.json
WeatherForecast.cs
fuente
¿Fue esto "trampa"? Acabo de hacer mi configuración en la clase de inicio estática, y luego puedo acceder a ella desde cualquier otro lugar:
fuente
Obténgalo dentro del controlador como un objeto a través de una llamada
Get<YourType>()
:fuente
Primero debe inyectar IConfiguration y luego, para leer desde los ajustes de la aplicación, puede usar uno de estos métodos:
Obtener una sección de datos
Obtenga un valor dentro de una sección
Obtener valor anidado dentro de la sección
fuente
La forma .NET Core 2.2
(Sin duda, Microsoft lo cambiará nuevamente a algo completamente diferente en la próxima versión de .NET).
1. appSettings.json
Puede parecer algo como esto. Aquí cargaremos Configuración1 y Configuración2
2. AppSettings.cs
La clase POCO para mantener la Configuración1 y la Configuración2. Vamos a cargar el appsettings.json en este objeto de clase. La estructura de la clase POCO debe coincidir con el archivo JSON, las propiedades pueden estar anidadas dentro de otras propiedades / clases si se desea.
3 Startup.cs
Cargue appSettings.json en su objeto AppSettings y comience a usarlo:
fuente
Con la última versión de netcoreapp 3.1, puede hacerlo de manera bastante simple sin dependencias de terceros.
Yo creé una esencia de este , pero se puede utilizar esta clase para leer un archivo JSON y devolver las propiedades dinámicas.
Hice esto específicamente para poder usar un appconfig.json en mi aplicación de consola dotnet. Acabo de poner esto en mi
Program.Main
función:Y esto devolverá un
dynamic
objeto para la propiedad. (Un JsonElement si no es un primitivo). Miappsettings.json
archivo se ve así:fuente