Web層とは異なる層でWeb.config
ファイルからキーを読み込もうとしています(同じソリューション)
これが私が試みているものです:
string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"];
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"];
そしてこれがWeb.config
ファイルの中の私のappSettings
です:
<configuration>
....
<appSettings>
<add key="PFUserName" value="myusername"/>
<add key="PFPassWord" value="mypassword"/>
</appSettings>
....
</configuration>
コードをデバッグするとき、username
とpassword
は単なるnull
なので、キーの値を取得していません。
これらの値を読むために私が間違っているのは何ですか?
代わりにWebConfigurationManagerクラスを使用してください。例えば:
string userName = WebConfigurationManager.AppSettings["PFUserName"]
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];
私はこの解決策がとても役に立つと思いました 。 ConfigurationManagerをラップするためにC#4.0 DynamicObjectを使用します。だから、このような値にアクセスする代わりに:
WebConfigurationManager.AppSettings["PFUserName"]
あなたはプロパティとしてそれらにアクセスします。
dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);
_ edit _ :リンクが古くなった場合のためのコードスニペットの追加
public class AppSettingsWrapper : DynamicObject
{
private NameValueCollection _items;
public AppSettingsWrapper()
{
_items = ConfigurationManager.AppSettings;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = _items[binder.Name];
return result != null;
}
}
呼び出し側が別のプロジェクトの場合は、呼び出し側プロジェクトではなく呼び出し側プロジェクトに設定を記述する必要があります。
2つのWeb.configファイルがあります。私はあなたがそれら二つのファイルと混同したかもしれないと思います。
この画像を確認してください。
この画像では、2つのWeb.configファイルを見ることができます。ビューフォルダではなくプロジェクトフォルダにある定数に定数を追加する必要があります。
これがお役に立てば幸いです
フルパスは
System.Configuration.ConfigurationManager.AppSettings["KeyName"]
また、この行を試してapp.config
ファイルから文字列値を取得することもできます。
var strName= ConfigurationManager.AppSettings["stringName"];
このプロジェクトが別のプロジェクトによって使用されている場合、この問題が発生します。アプリ設定キーを必ず親プロジェクトのapp.configまたはweb.configにコピーしてください。