ASP.NET Core appsettings.json mise à jour dans le code
Je suis actuellement en train de travailler sur le projet à l'aide de asp.net core v1.1, et dans mon appsettings.json j'ai:
"AppSettings": {
"AzureConnectionKey": "***",
"AzureContainerName": "**",
"NumberOfTicks": 621355968000000000,
"NumberOfMiliseconds": 10000,
"SelectedPvInstalationIds": [ 13, 137, 126, 121, 68, 29 ],
"MaxPvPower": 160,
"MaxWindPower": 5745.35
},
J'ai aussi classe que j'utilise pour les stocker:
public class AppSettings
{
public string AzureConnectionKey { get; set; }
public string AzureContainerName { get; set; }
public long NumberOfTicks { get; set; }
public long NumberOfMiliseconds { get; set; }
public int[] SelectedPvInstalationIds { get; set; }
public decimal MaxPvPower { get; set; }
public decimal MaxWindPower { get; set; }
}
Et DI activé pour utiliser puis dans Démarrage.cs:
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
Est-il possible de modifier et d'enregistrer MaxPvPower
et MaxWindPower
de Contrôleur?
J'ai essayé d'utiliser
private readonly AppSettings _settings;
public HomeController(IOptions<AppSettings> settings)
{
_settings = settings.Value;
}
[Authorize(Policy = "AdminPolicy")]
public IActionResult UpdateSettings(decimal pv, decimal wind)
{
_settings.MaxPvPower = pv;
_settings.MaxWindPower = wind;
return Redirect("Settings");
}
Mais il n'a rien fait.
Il n'est pas clair ce que tu veux dire par "modifier et de les enregistrer." Êtes-vous vouloir "sauver" 1. pour mettre à jour appsettings.json ou 2. pour enregistrer seulement sa représentation en mémoire.
L'Option numéro 1, Sir. Ce que j'ai pu faire a été de déplacer ces deux paramètres dans un autre fichier - installationsettings.json, les enregistrer avec reloadOnChange dans le Démarrage de classe et lors de la mise à jour - modification du fichier, comme @Ankit suggéré plus tôt aujourd'hui.
Siemko, comment avez-vous mise à jour le json fichier de configuration? Avez-vous l'utilisation de la Configuration cadre ou avez-vous ouvrez le fichier à modifier?
J'ai ouvert le fichier, le modifier et l'enregistrer ensuite.
merci c'est le seul moyen que j'ai trouvé moi-même. Il serait plus agréable d'avoir dans IOptions une méthode pour enregistrer les modifications.
L'Option numéro 1, Sir. Ce que j'ai pu faire a été de déplacer ces deux paramètres dans un autre fichier - installationsettings.json, les enregistrer avec reloadOnChange dans le Démarrage de classe et lors de la mise à jour - modification du fichier, comme @Ankit suggéré plus tôt aujourd'hui.
Siemko, comment avez-vous mise à jour le json fichier de configuration? Avez-vous l'utilisation de la Configuration cadre ou avez-vous ouvrez le fichier à modifier?
J'ai ouvert le fichier, le modifier et l'enregistrer ensuite.
merci c'est le seul moyen que j'ai trouvé moi-même. Il serait plus agréable d'avoir dans IOptions une méthode pour enregistrer les modifications.
OriginalL'auteur Siemko | 2017-01-14
Vous devez vous connecter pour publier un commentaire.
Voici un article pertinent de Microsoft concernant la Configuration de l'installation .Net Applications De Base:
Asp.Net Configuration De Base
La page a également exemple de code qui peut être utile.
Mise à jour
J'ai pensé En mémoire de fournisseur et de la liaison à un POCO de classe pourrait être de quelque utilité, mais ne fonctionne pas comme OP prévu.
L'option suivante peut être la mise en
reloadOnChange
paramètre de AddJsonFile à true lors de l'ajout du fichier de configuration etmanuellement de parser le JSON fichier de configuration et de faire des changements comme prévu.
ok, je pense que vous pouvez essayer de l'analyse du fichier de configuration vous-même et de modifier directement les valeurs et garder
reloadOnChange
de la valeur àtrue
dansstartup.cs
.Je vous remercie une fois de plus, c'est quelque chose que je voulais éviter, mais si il n'y a pas d'autre moyen, j'ai essayer ça.
Vous pouvez accéder à la Configuration de l'objet n'importe où en l'enregistrant avec DI. Que cela pourrait-il fonctionner?
il fait, mais malheureusement, je ne peux pas mettre à jour les valeurs. Il me semble que je dois trouver une autre façon de stocker ces paramètres.
OriginalL'auteur Ankit
Fondamentalement, vous pouvez définir les valeurs dans
IConfiguration
comme ceci:Le problème il est que, par exemple, la
JsonConfigurationProvider
ne pas mettre en œuvre la sauvegarde de la configuration dans le fichier. Comme vous pouvez le voir dans la source il ne remplace pas la méthode Set deConfigurationProvider
. (voir source)Vous pouvez créer votre propre fournisseur et de mettre en œuvre l'économie. Ici (échantillon de Base de l'Entity Framework fournisseur personnalisé) est un exemple de comment le faire.
OriginalL'auteur Mathias