MVC 3从web.config中的AppSettings获取值

Vin*_*mar 33 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

在普通的ASP.NET Web表单站点中,我将使用web.configs"appsettings"将应用程序设置数据添加到站点.但是,使用MVC 3时,我无法以这种方式检索设置值.

首先,有2个web.config文件.一个位于站点的根目录中,第二个列在"视图"区域中.我假设我想将我的appsettings信息放在root web.config文件中,对吗?(将其置于其他视图下似乎会产生错误,指出"AppSettings"每个Web应用程序只能出现一次.)

当我尝试检索它时(C#:System.Configuration.ConfigurationManager.AppSettings ["SettingName"])我得到一个空白或空/ null返回值.我究竟做错了什么?

我应该提一下,我实际上是在模型区域下的类文件中检索此信息,以获取使用get的模型的特定值集; 组;.我有可能不允许在模特中这样做吗?

在Controller.cs中:

WindowsLiveConnect.ServiceConfiguration WLSC = new WindowsLiveConnect.ServiceConfiguration();

ViewBag.ClientID = SC.ClientID; // This returns empty
Run Code Online (Sandbox Code Playgroud)

在web.config中

...

  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>

    <add key="ClientID" value="0000000040062A3F" />
    <add key="ClientSecret" value="SUPERSECRETPASSWORD" />
    <add key="RedirectURL" value="http%3A%2F%2Fwww.quilnet.com" />
  </appSettings>

...
Run Code Online (Sandbox Code Playgroud)

在Model.cs文件中:

        public class ServiceConfiguration
        {
            private string clientid;
            private string clientsecret;
            private string redirecturl;

            public string ClientID
            {

                get { return clientid; }

                set
                {
                    clientid = System.Configuration.ConfigurationManager.AppSettings["ClientID"];
                }
            }

            public string ClientSecret
            {

                get { return clientsecret; }

                set
                {
                    clientsecret = System.Configuration.ConfigurationManager.AppSettings["ClientSecret"];
                }
            }

            public string RedirectURL
            {

                get { return redirecturl; }

                set
                {
                    redirecturl = System.Configuration.ConfigurationManager.AppSettings["RedirectURL"];
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

小智 60

通常我使用AppSettings静态类来访问这些参数.像这样的东西:

public static class AppSettings 
{

    public static string ClientSecret
    {
        get
        {
            return Setting<string>("ClientSecret");
        }
    }

    private static T Setting<T>(string name)
    {
        string value = ConfigurationManager.AppSettings[name];

        if (value == null)
        {
            throw new Exception(String.Format("Could not find setting '{0}',", name));
        }

        return (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 从Web.config文件的appSettings元素读取的值始终为String类型.如果Web.config文件中不存在指定的密钥,则不会发生错误.而是返回一个空字符串.(http://msdn.microsoft.com/en-us/library/610xe886(v=vs.85).aspx) (3认同)
  • 我的意思是:我相信你应该检查String.IsNullOrEmpty(value)而不是value = null (3认同)
  • 没关系:我注意到你使用的是System.Configuration.ConfigurationManager而不是System.Web.Configuration.WebConfigurationManager (2认同)

Phi*_*ler 31

你有没有打过电话?我猜它永远不会被调用,所以私有变量永远不会从配置中获取值.

以这种方式尝试(只需检索get中的值,不需要设置):

public string ClientSecret
{    
  get { return System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; }    
}
Run Code Online (Sandbox Code Playgroud)


All*_*cía 7

我是这样做的:

myVar = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString();
Run Code Online (Sandbox Code Playgroud)