1

J'ai une application .NET Core 1.1 avec un attribut personnalisé défini sur une action dans le HomeController. Étant donné que j'ai besoin d'une valeur du fichier de configuration (appsettings.json) dans la logique d'attribut, est-il possible d'accéder à la configuration au niveau de l'attribut?Comment lire les valeurs de configuration (appsettings) dans un attribut dans .NET Core?

appsettings.json

{ 
    "Api": { 
     "Url": "http://localhost/api" 
    } 
} 

HandleSomethingAttribute.cs

public class HandleSomethingAttribute : Attribute, IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext context) 
    { 
     // read the api url somehow from appsettings.json 
    } 

    public void OnActionExecuted(ActionExecutedContext context) 
    { 
    } 
} 

HomeController.cs

public class HomeController: Controller 
{ 
    [HandleSomething] 
    public IActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

Pouvez-vous partager un peu de code pour ce que vous avez et ce que vous essayez d'accomplir? – Shoe

+0

@Shoe voir la question mise à jour –

+2

Même problème ici ... Pourriez-vous le résoudre? – Dzhambazov

Répondre

2
public HandleSomethingAttribute() 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(Directory.GetCurrentDirectory()) 
     .AddJsonFile("appsettings.json"); 
    Configuration = builder.Build(); 

    string url = Configuration.GetSection("Api:Url").Value; 
} 

Bonjour, essayez ceci dans le constructeur d'attribut. Ça devrait marcher!

+0

Et comment puis-je accéder au nom de l'environnement? Parce que j'ai différents appSettings pour le développement et la production –

2

Je fais la même chose. J'ai fait quelque chose de similaire à la solution de Dzhambazov, mais pour obtenir le nom de l'environnement j'ai utilisé Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"). J'ai mis ceci dans une variable statique dans une classe statique que je peux lire n'importe où dans mon projet.

public static class AppSettingsConfig 
{ 
    public static IConfiguration Configuration { get; } = new ConfigurationBuilder() 
     .SetBasePath(Directory.GetCurrentDirectory()) 
     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) 
     .Build(); 
} 

je peux appeler cela de l'attribut comme ceci:

public class SomeAttribute : Attribute 
{ 
    public SomeAttribute() 
    { 
     AppSettingsConfig.Configuration.GetValue<bool>("SomeBooleanKey"); 
    } 
}