2011-01-04 1 views
226

私は、Web層とは異なる層にWeb.configファイルから鍵を読んしようとしています(同じ溶液)を使用してweb.configからキーを読み取るとのConfigurationManager

ここ

私がしようとしていますものです:

string userName = System.Configuration.ConfigurationManager.AppSettings["PFUserName"]; 
string password = System.Configuration.ConfigurationManager.AppSettings["PFPassWord"]; 

そしてここでは、私のappSettingsWeb.configファイル内:

<configuration> 
    .... 
    <appSettings> 
     <add key="PFUserName" value="myusername"/> 
     <add key="PFPassWord" value="mypassword"/> 
    </appSettings> 
    .... 
</configuration> 

私はコードをデバッグするときusernamepasswordはちょうどnullなので、キーの値は得られません。

これらの値を読み取るにはどうしたらよいですか?

+0

この2番目のプロジェクトはどのようにウェブサイトからアクセスされますか? –

+11

**構文が正しい**。間違ったweb.configファイルを編集したため、おそらく 'NULL'を返します。コメントは遅くなりましたが、誰もこれを指摘しませんでした。 –

+1

それは私に起こったことです、私はViews web.configにいました。 – wintercyborg

答えて

361

代わりにWebConfigurationManagerクラスを使用してみてください。たとえば、次のように

string userName = WebConfigurationManager.AppSettings["PFUserName"] 
+2

あなたの答えをありがとう、私はお勧めしましたが、同じ結果を得ます。私は実際にToString()でNullReferenceExceptionを取得します – twal

+0

null例外が発生した場合は、設定が見つからないことを意味します。このようなことをやってみてください: "object x = WebConfigurationManager。AppSettings ["PFUserName"]; "あなたはおそらく要求された設定を見つけることができないことを意味するヌル値を取得します。 –

+1

更新、申し訳ありません、あなたのメソッドは実際に仕事でした。ありがとうございました! – twal

-5

私はこれをテストしていませんでしたが、私はそれは次のように行われていると思い申し訳ありません:

var filemap = new System.Configuration.ExeConfigurationFileMap();    
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(filemap, System.Configuration.ConfigurationUserLevel.None); 

//usage: config.AppSettings["xxx"] 
23
var url = ConfigurationManager.AppSettings["ServiceProviderUrl"]; 
+12

正解。しかし、ToString()は冗長です。 –

+7

値がアプリの設定にない場合、ToStringは危険です。解決する前に返されたオブジェクトをトラップし、nullをテストする方がよい。 "mysettings"が設定に含まれていないときにそれを実行してみると、例外ポップが表示されます。代わりに、以下のようなものが安全かもしれません... string key = "mysettings"; 文字列値= ConfigurationManager.AppSettings [キー]; if(value == null)value = "不明な値"; –

+1

trueそれは文字列であるため、.ToString()の必要はありません。 – Rola

0

このプロジェクトは別のプロジェクトで使用されている場合、この問題が発生します。アプリ設定キーを親プロジェクトのapp.configまたはweb.configにコピーしてください。

2

I found this solution to be quite helpful。これはC#4.0 DynamicObjectを使用してConfigurationManagerをラップします。だからではなく、このような値へのアクセス:

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; 
    } 
} 
3

は、If呼び出し側は別のプロジェクトですので、呼び出されたプロジェクトではなく呼び出し元プロジェクトにconfigを記述する必要があります。

0

また、この行を試して文字列値をapp.configファイルから取得することもできます。

var strName= ConfigurationManager.AppSettings["stringName"]; 
関連する問題