Je n'arrive pas à comprendre comment lire les valeurs de appsettings.json dans mon fichier _Layout.chtml.
N'est-ce pas simplement disponible, quelque chose comme ceci? @ Configuration ["ApplicationInsights: InstrumentationKey"]
J'ai créé un nouveau projet MVC en utilisant des pages de rasoir.
fyi, je suis un newbee mvc - les exemples de code aident beaucoup.
Dans .net core mvc, vous pouvez injecter la configuration en ajoutant les deux lignes suivantes en haut de votre vue:
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
Vous pouvez alors accéder à la valeur comme ceci:
@Configuration.GetSection("ApplicationInsights")["InstrumentationKey"]
Si vous utilisez le modèle d'options, vous pouvez les insérer dans votre vue de la manière suivante:
@using Microsoft.Extensions.Options
@inject IOptions<ApplicationInsightsOptions>
ApplicationInsightsOptionsAccessor
@
{
var instrumentationKey =
ApplicationInsightsOptionsAccessor.Value.InstrumentationKey;
}
À l'aide de ActionFilters
, vous pouvez interrompre la demande et ajouter les variables de configuration, par exemple, à la ViewBag
afin qu'elle soit accessible à partir des vues ou du fichier _Layout.cshtml
.
Par exemple, si la section de configuration suivante se trouve dans votre appsettings.json
{
"MyConfig": {
"MyValue": "abc-def"
}
}
Dans le code MyConfig.cs
serait:
public class MyConfig
{
public string MyValue{ get; set; }
}
Commencez par créer un ActionFilter très simple, dérivé de IAsyncActionFilter
, comme suit:
public class SampleActionFilter : IAsyncActionFilter
{
private MyConfig _options;
public SampleActionFilter(IConfiguration configuration)
{
_options = new MyConfig();
configuration.Bind(_options);
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
((Microsoft.AspNetCore.Mvc.Controller)context.Controller).ViewBag.MyConfig = _options;
await next();
}
}
Plus tard dans la méthode Startup.ConfigureServices
, remplacez services.AddMvc
par ce qui suit:
public void ConfigureServices(IServiceCollection services)
{
//..........
services.AddMvc(options=>
{
options.Filters.Add(new SampleActionFilter(
Configuration.GetSection("MyConfig")
));
});
//..........
}
Pour accéder aux valeurs simplement dans la vue _Layout.cshtml
ou une autre, vous pouvez taper:
@ViewBag.MyConfig.MyValue