asp.net mvc - tutorial - MVC 3 obtiene valores de AppSettings en web.config
mvc 4 c# (4)
¿Alguna vez llamas a set? Supongo que nunca se llama, por lo que la variable privada nunca obtiene el valor de la configuración.
Pruébalo de esta manera (solo recupera el valor en el get, no se necesita un juego):
public string ClientSecret
{
get { return System.Configuration.ConfigurationManager.AppSettings["ClientSecret"]; }
}
En los sitios web normales de formularios ASP.NET, utilizaría web.configs "appsettings" para agregar datos de configuración de aplicaciones a un sitio. Sin embargo, no puedo recuperar los valores de configuración de esta manera cuando uso MVC 3.
En primer lugar, hay 2 archivos web.config. Uno en la raíz del sitio, el segundo aparece en el área Vistas. Supongo que quiero poner la información de mis aplicaciones en el archivo raíz web.config, ¿correcto? (ponerlo en el otro bajo las vistas parece producir un error que indica que "AppSettings" solo puede aparecer una vez por aplicación web).
Cuando trato de recuperarlo (C #: System.Configuration.ConfigurationManager.AppSettings ["SettingName"]) obtengo un valor de retorno en blanco o vacío / nulo. ¿Qué estoy haciendo mal?
Debo mencionar que en realidad estoy recuperando esta información en un archivo de clase en el área Modelos para establecer valores específicos para un modelo que usa get; conjunto;. ¿Es posible que no se me permita hacer esto en Models?
En un Controller.cs:
WindowsLiveConnect.ServiceConfiguration WLSC = new WindowsLiveConnect.ServiceConfiguration();
ViewBag.ClientID = SC.ClientID; // This returns empty
En 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>
...
En el archivo 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"];
}
}
}
Al mirar el código ¿supongo que está utilizando aplicaciones alojadas en proveedores de SharePoint? Lo mejor que se puede hacer aquí en mvc es ignorar el archivo web.config que está en el nivel de vista y solo usar el que se encuentra en la raíz de la aplicación weba.
La otra cosa que quiero mencionar es que probablemente no sea una buena idea buscar información de configuración del web.config en el modelo real. Es mejor moverlo a: - el constructor del controlador - la fábrica / repositorio que devuelve este modelo
Lo hice de esta manera:
myVar = System.Configuration.ConfigurationManager.AppSettings["ClientID"].ToString();
Usualmente estoy usando la clase estática de AppSettings para acceder a esos parámetros. Algo como esto:
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);
}
}