No estoy seguro de qué me estoy perdiendo aquí, pero no puedo obtener los valores de mi appsettings.json en mi aplicación .net core. Tengo mi appsettings.json como:
{
"AppSettings": {
"Version": "One"
}
}
Puesta en marcha:
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
siempre es nulo. ¿Hay algo que me estoy perdiendo aquí?
c#
asp.net-core
asp.net-core-mvc
un hombre
fuente
fuente
Respuestas:
Programa y clase de inicio
.NET Core 2.x
No es necesario nuevo
IConfiguration
en elStartup
constructor. Su implementación será inyectada por el sistema DI..NET Core 1.x
Startup
Debe indicarle que cargue los archivos de configuración de la aplicación.Obteniendo valores
Hay muchas formas de obtener el valor que configura desde la configuración de la aplicación:
ConfigurationBuilder.GetValue<T>
Digamos que se
appsettings.json
ve así:Manera simple
Puede inyectar toda la configuración en el constructor de su controlador / clase (vía
IConfiguration
) y obtener el valor que desea con una clave específica:Patrón de opciones
El
ConfigurationBuilder.GetValue<T>
funciona muy bien si sólo se necesita uno o dos valores de la configuración de la aplicación. Pero si desea obtener múltiples valores de la configuración de la aplicación, o no desea codificar esas cadenas de teclas en varios lugares, puede ser más fácil usar el Patrón de opciones . El patrón de opciones usa clases para representar la jerarquía / estructura.Para usar el patrón de opciones:
IOptions<T>
en el constructor del controlador / clase en el que desea obtener valores1. Definir clases de configuración para representar la estructura.
Puede definir clases con propiedades que necesiten coincidir exactamente con las claves en la configuración de su aplicación. El nombre de la clase no tiene que coincidir con el nombre de la sección en la configuración de la aplicación:
2. Registre la instancia de configuración
Y luego debe registrar esta instancia de configuración
ConfigureServices()
en el inicio:3. Inyectar IOptions
Por último, en el controlador / clase que desea obtener los valores, debe inyectar a
IOptions<AppIdentitySettings>
través del constructor:fuente
IOptionsSnapshot<T>
lugar deIOptions<T>
. Puedes echar un vistazo a este artículo: offer.solutions/blog/articles/2017/02/17/… . Sin embargo, no he tenido la oportunidad de probarlo.Simplemente cree un archivo AnyName.cs y pegue el siguiente código.
Debe reemplazar el nombre del archivo YouAppSettingFile.json con su nombre de archivo.
Su archivo .json debería verse a continuación.
Ahora puedes usarlo.
No olvide agregar referencia en su clase donde quiera usar.
Código para recuperar valor.
fuente
Agregando a la respuesta de David Liang para Core 2.0 -
appsettings.json
los archivos están vinculados a laASPNETCORE_ENVIRONMENT
variable.ASPNETCORE_ENVIRONMENT
se puede ajustar a cualquier valor, pero tres valores están soportados por el marco:Development
,Staging
, yProduction
. SiASPNETCORE_ENVIRONMENT
no está configurado, se establecerá por defecto enProduction
.Para estos tres valores, estos archivos appsettings.ASPNETCORE_ENVIRONMENT.json son compatibles desde el primer momento
appsettings.Staging.json
,appsettings.Development.json
yappsettings.Production.json
Los tres archivos json de configuración de aplicaciones anteriores se pueden usar para configurar múltiples entornos.
Ejemplo
appsettings.Staging.json
Se usa
Configuration["config_var"]
para recuperar cualquier valor de configuración.fuente
appsettings.json
+appsettings.{env.EnvironmentName}.json
. Por lo tanto, la afirmación de que ASP.NET Core solo carga los archivos appsettings.json de Desarrollo, Estadificación y Producción es actualmente incorrecta.ASPNETCORE_ENVIRONMENT
cada vez? Las cosas fueron mucho más fáciles en .Net 4. Estos fanáticos de JSON lo arruinaron a lo grandeSupongo que la forma más simple es por DI. Un ejemplo de llegar al controlador.
fuente
services.AddSingleton(Configuration);
, ahora funcionaEn el constructor de la clase Startup, puede acceder a appsettings.json y muchas otras configuraciones utilizando el objeto inyectado IConfiguration:
Startup.cs Constructor
Contenido de appsettings.json
fuente
fuente
En mi caso, era simple como usar el método Bind () en el objeto de configuración. Y luego agregue el objeto como singleton en el DI.
El objeto Instrucción puede ser tan complejo como desee.
fuente
Para ASP.NET Core 3.1 puede seguir esta guía:
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
IConfiguration["Parent:Child"]
sintaxis?Creo que la mejor opción es:
Crear una clase de modelo como esquema de configuración
Registrarse en DI: services.Configure (Configuration.GetSection ("democonfig"));
Obtenga los valores como objeto modelo de DI en su controlador:
fuente
Desde Asp.net core 2.2 a arriba puede codificar de la siguiente manera:
Paso 1. Cree un archivo de clase AppSettings.
Este archivo contiene algunos métodos para ayudar a obtener valor por clave del archivo appsettings.json. Parece el siguiente código:
Paso 2. Configuración inicial para el objeto AppSettings
Necesitamos declarar y cargar el archivo appsettings.json cuando se inicia la aplicación, y cargar la información de configuración para el objeto AppSettings. Haremos este trabajo en el constructor del archivo Startup.cs. Por favor nota línea
AppSettings.Instance.SetConfiguration(Configuration);
Bien, ahora tengo un archivo appsettings.json con algunas claves como se muestra a continuación:
Paso 3. Leer el valor de configuración de una acción
Hago una demostración de una acción en el controlador de inicio como a continuación:
Y a continuación se muestra el resultado:
Haga clic para ver el resultado
Para obtener más información, puede consultar el artículo obtener valor de appsettings.json en asp.net core para obtener más detalles del código.
fuente
Es simple: en appsettings.json
En archivo .cs:
fuente