在普通的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
在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"];
}
}
}
答案 0 :(得分:57)
通常我使用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);
}
}
答案 1 :(得分:30)
你有没有打过电话?我猜它永远不会被调用,所以私有变量永远不会从配置中获取值。
以这种方式尝试(只需检索get中的值,不需要设置):
public string ClientSecret
{
get { return System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; }
}
答案 2 :(得分:6)
我是这样做的:
myVar = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString();
答案 3 :(得分:1)
查看代码我假设您使用的是sharepoint提供商托管的应用程序? 在mvc中最好的做法是忽略视图级别的web.config,只使用web应用程序根目录中的那个。
我想提到的另一件事是,从实际模型中的web.config获取配置信息可能不是一个好主意。 最好把它移到: - 控制器的构造函数 - 返回此模型的工厂/存储库