43 votes

Accéder aux paramètres Web.config dans l'application Asp.Net Core?

Je comprends que asp.net le noyau d'un nouveau système de configuration qui est très flexible et c'est génial. Mais il y a des choses que j'aime sur le web.config en fonction de la configuration du système à partir de .net 4.x. Par exemple, on peut mettre des commentaires dans le site web.fichier de configuration depuis un fichier xml. Et qui pour moi vaut la peine de coller avec xml plutôt que d'aller avec le tout nouveau json approche. [Mise à jour: maintenant, je comprends que le json approche prend également en charge les commentaires dans le fichier.]

Donc, si j'ai un Asp.Net Web de Base du Projet qui vise le plein cadre, il semble que je devrais être en mesure d'utiliser le web.config basée System.Configuration.ConfigurationManager.AppSettings[key] approche pour l'obtention d'un paramètre.

Mais quand j'essaie, la valeur revient toujours null (au moins avec IIS express à l'aide d'VS2015).

Il devrait fonctionner correctement? Toute réflexion sur ce que je pourrais être plus de la recherche?

Web.config

<configuration>
    <appSettings>
        <add key="SomeSetting" value="true"/>
    </appSettings>

    <system.webServer>
        <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
        </handlers>

        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
     </system.webServer>
</configuration>

Code de paramètre d'accès:

string key = "SomeSetting";
string setting = ConfigurationManager.AppSettings[key];
if (setting == null)
       throw new Exception("The required configuration key " + key + " is missing. ");

Mise à JOUR
Après plusieurs recherche je comprends maintenant pourquoi il ne fonctionne pas, mais je n'ai toujours pas trouvé un moyen pour résoudre ce problème. La cause semble être que le ConfigurationManager est à la recherche pour les informations de configuration dans un fichier différent et pas dans le web.config.

Ceci peut être vu en regardant AppDomain.CurrentDomain.SetupInformation.ConfigurationFile de la propriété. Dans mon cas, au lieu de pointer vers l' website_folder\web.config c'est plutôt pointant website_folder\bin\Debug\net461\win7-x64\wwwGiftOasisResponsive.exe.Config où website_folder est le chemin vers le dossier contenant mon site web.

La documentation et l'intellisense dire AppDomain.CurrentDomain.SetupInformation.ConfigurationFile est réglable propriété mais quand j'essaie, je trouve que le réglage ne change pas la valeur. Très bizarre.

Ainsi, alors que je vois maintenant ce que le problème est que je n'arrive pas à trouver un moyen pour résoudre ce problème.

42voto

Ron C Points 8275

J'ai un peu trouvé la solution. La clé pour essayer de le comprendre était de se rendre compte que l' AppDomain.CurrentDomain.SetupInformation.ConfigurationFile de la propriété n'était pas pointant vers le web.fichier de config, mais plutôt de l'exe.fichier de configuration pour l'exécutable en cours d'exécution le site web. Rappelez-vous, en vertu de l' .net de base, le site web s'exécute dans son propre processus et il a son propre exe.

Donc la config modèle .Net 4.x utilise avec le ConfigurationManager est plus proche de celle d'une application de bureau de 4.x une application web. Je veux dire par là que c'est en regardant le fichier exe.config pas le web.config.

Ensuite, j'ai remarqué que l'Asp.Net Base de Projet Web (en utilisant le plein cadre) contient une application.fichier de config comme une application de bureau serait. Et il s'avère que si vous mettez votre .net 4.x l'application paramètres de configuration dans le fichier, ils seront placés dans l'exe.fichier de configuration lors de l'exe est généré, que ce soit pour le debug ou release. Exactement comme il fonctionne avec une victoire formes d'application par exemple.

Donc, la façon d'utiliser le ConfigurationManager dans un asp.net de base de l'application web qui cible le document complet est de mettre le paramètre d'application dans l'app.fichier de configuration plutôt que sur le web.fichier de configuration. Le ConfigurationManager trouverez pas de problème.

enter image description here

Tout cela explique beaucoup de choses, il ne propose pas encore la capacité de mettre ces paramètres dans le web.config et y accéder via le ConfigurationManager. Mais je commence à croire que c'est pas possible dans un asp.net web de base de l'application même s'il est axé sur le plein cadre.

5voto

Pascal Zanitti Points 1

J'ai rencontré ce problème lorsque j'ai commencé à publier mon application asp.net core 1.1 sur IIS.
Il y aurait un fichier web.config généré sur IIS qui a été surchargé lors de la publication. Pour activer l'authentification Windows, j'ai dû ajouter manuellement un fichier web.config à mon projet. Celui-ci est publié correctement sur IIS:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\yourproject.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    <security>
      <authentication>
        <anonymousAuthentication enabled="false" />
        <windowsAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</configuration>
 

4voto

jawa Points 34

J'ai également rencontré ce problème. Après quelques recherches et lectures, c'est comme si vous pouviez ajouter web.config manuellement mais c'est pour fournir des paramètres pour IIS (par exemple, Authentification, ...).

Pour les paramètres d'application ou les paramètres personnalisés, vous devez travailler avec le fichier appsettings.json et la nouvelle configuration dans .Net Core.

Documentation Microsoft

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X