ConfigurationManager를 사용하여 Web.Config에서 키 읽기


284

Web.config웹 계층과 다른 계층 의 파일에서 키를 읽으려고합니다 (동일한 솔루션)

여기 내가 시도하는 것이 있습니다 :

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

그리고 여기 파일에 내 appSettings것이 Web.config있습니다 :

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

내가 코드를 디버깅 할 때 usernamepassword단지이다 null, 그래서 키의 값을받지 못하고있다.

이 값을 읽는 데 내가 뭘 잘못하고 있니?


웹 사이트에서이 두 번째 프로젝트에 어떻게 액세스하고 있습니까?
Dan Atkinson

13
구문이 정확합니다 . 아마 잘못된 web.config 파일을 편집했기 때문에이 파일이 반환 NULL됩니다. 늦은 의견이지만 아무도 지적하지 않았습니다.
Hammad Khan

1
그것이 나에게 일어난 일이며, Views web.config에있었습니다.
JQII

1
웹 프로젝트 만 System.Configuration.ConfigurationManager.AppSettings 객체에 액세스 할 수 있습니다. 다른 레이어는 System.Web을 구현하지 않으므로이 개체에 액세스 할 수 없습니다.
Hashim Akhtar

답변:


475

대신 WebConfigurationManager 클래스를 사용해보십시오. 예를 들면 다음과 같습니다.

string userName = WebConfigurationManager.AppSettings["PFUserName"]

2
귀하의 답변에 감사드립니다. 권장하는대로 시도했지만 여전히 동일한 결과를 얻습니다. 사실 지금) 있으며, toString (에 NullReferenceException이 얻을
twal

null 예외가 발생하면 설정을 찾지 못했음을 의미합니다. "object x = WebConfigurationManager.AppSettings ["PFUserName "];"와 같은 작업을 시도하십시오. 요청 된 설정을 찾지 못했음을 의미하는 null 값을 얻을 수 있습니다.
헥터 코레아

21
설정이 올바른 web.config에 있는지 확인하십시오. ( "보기"폴더 아래의 web.config에 값을 덤프하기 전에 실수를했는데 예상대로 작동하지 않는 문제를 해결하는 데 많은 시간을 허비했습니다.
Hector Correa

큰. 나는 그것이 기쁘다.
헥터 코레아

4
감사합니다. AppSettings 인덱서에서 이미 문자열을 반환하므로 ToString을 삭제할 수 있습니다.
Ido Ran

43
  var url = ConfigurationManager.AppSettings["ServiceProviderUrl"];

12
올바른 대답. ToString()그래도 중복됩니다.
anar khalilov

9
값이 앱 구성에 없으면 ToString이 위험 할 수 있습니다. 해결하기 전에 반환 된 객체를 포착하고 null을 테스트하는 것이 좋습니다. "mysettings"가 구성에 없으면 실행 해보십시오. 예외 팝업이 나타납니다. 대신 다음과 같은 것이 더 안전 할 수도 있습니다 ... string key = "mysettings"; 문자열 값 = ConfigurationManager.AppSettings [키]; if (value == null) value = "알 수없는 값";
Joe Healy

1
.ToString ()은 문자열이기 때문에 필요하지 않습니다.
Rola

2
@JoeHealy null 통합 연산자를 사용하여이를 단축하고 명확성을 높일 수 있습니다.string value = ConfigurationManager.AppSettings[key] ?? "unknown value"
Zenexer

이 답변과 OP의 질문에있는 코드의 차이점이 무엇인지 궁금합니다. 그들은 같지 않습니까?
user1451111

6

호출자가 다른 프로젝트 인 경우 호출 된 프로젝트가 아닌 호출자 프로젝트에 구성을 작성해야합니다.


6

이 솔루션이 매우 유용하다는 것을 알았습니다 . C # 4.0 DynamicObject를 사용하여 ConfigurationManager를 래핑합니다. 따라서 다음과 같은 값에 액세스하는 대신

 WebConfigurationManager.AppSettings["PFUserName"]

당신은 속성으로 그들을 액세스 :

dynamic appSettings = new AppSettingsWrapper();
Console.WriteLine(appSettings.PFUserName);  

편집 : 링크가 오래 된 경우 코드 스 니펫 추가 :

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

전체 경로는

System.Configuration.ConfigurationManager.AppSettings["KeyName"]

2

두 개의 Web.config 파일이 있습니다. 나는 당신이 그 두 파일과 혼동했을 수 있다고 생각합니다.

이 이미지를 확인하십시오 :

이 링크를 클릭하고 이미지를 확인하십시오

이 이미지에는 두 개의 Web.config 파일이 있습니다. 뷰 폴더가 아닌 프로젝트 폴더에있는 상수에 상수를 추가해야합니다.

이것이 당신을 도울 수 있기를 바랍니다


1

다른 프로젝트에서이 프로젝트를 사용중인 경우이 문제가 발생합니다. 앱 설정 키를 상위 프로젝트의 app.config 또는 web.config에 복사하십시오.


1

또한이 줄을 사용하여 app.config파일 에서 문자열 값을 가져올 수 있습니다.

var strName= ConfigurationManager.AppSettings["stringName"];

0

.config 파일의 아래 설정을 가정하면 :

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

이 시도:

public class myController : Controller
{
    NameValueCollection myKeys = ConfigurationManager.AppSettings;

    public void MyMethod()
    {
        var myUsername = myKeys["PFUserName"];
        var myPassword = myKeys["PFPassWord"];
    }
}

-5

미안하지만 이것을 테스트하지는 않았지만 다음과 같이 생각합니다.

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

//usage: config.AppSettings["xxx"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.