繁体   English   中英

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

[英]MVC 3 getting values from AppSettings in web.config

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

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

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

我应该提到的是,我实际上是在Models区域下的Class文件中检索此信息,以便使用get设置模型的特定值。 组;。 是否有可能不允许我在模型中执行此操作?

在Controller.cs中:

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

ViewBag.ClientID = SC.ClientID; // This returns empty

在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>

...

在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"];
                }
            }
        }

通常,我使用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);
    }
}

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

尝试这种方式(只需获取get中的值,无需设置即可):

public string ClientSecret
{    
  get { return System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; }    
}

我这样做是这样的:

myVar = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString();

看代码,我假设您使用的是sharepoint provider托管的应用程序? 在mvc中,此处最好的做法是忽略视图级别的web.config,而仅在Web应用程序的根目录中使用它。

我想提及的另一件事是,从实际模型中的web.config获取配置信息可能不是一个好主意。 最好将其移动到:-控制器的构造函数-返回此模型的工厂/存储库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM