web-dev-qa-db-ja.com

MVC 3はweb.configのAppSettingsから値を取得します

通常のASP.NET Webフォームサイトでは、web.configs "appsettings"を使用して、アプリケーション設定データをサイトに追加します。ただし、MVC 3を使用する場合、この方法で設定値を取得することはできません。

まず、web.configファイルが2つあります。 1つはサイトのルートにあり、2つ目は[ビュー]領域にリストされています。ルートweb.configファイルにappsettings情報を入れたいと思いますか? (他のビューの下に置くと、「AppSettings」はWebアプリケーションごとに1回しか表示できないことを示すエラーを生成するようです。)

取得しようとすると(C#:System.Configuration.ConfigurationManager.AppSettings ["SettingName"])戻り値が空白または空/空になります。何が間違っていますか?

Getを使用してモデルの特定の値を設定するために、Modelsエリアの下のClassファイルで実際にこの情報を取得していることに言及する必要があります。セットする;。モデルでこれを行うことが許可されていない可能性はありますか?

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"];
                }
            }
        }
33
Vinod Kumar

通常、これらのパラメーターにアクセスするには、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);
    }
}
59

セットを呼び出すことはありますか?私はそれが決して呼び出されないと推測しているので、プライベート変数は設定から​​値を取得することはありません。

この方法で試してください(getで値を取得するだけで、設定は不要です)。

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

私はこのようにしました:

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

SharePointプロバイダーがホストするアプリを使用していると思われるコードを見てください。ここでmvcで行う最善の方法は、ビューレベルにあるweb.configを無視し、webapplicationのルートにあるもののみを使用することです。

もう1つ言及したいのは、実際のモデルのweb.configから構成情報を取得することはおそらく良い考えではないということです。次のいずれかに移動する方が良い:-コントローラーのコンストラクター-このモデルを返すファクトリー/リポジトリー

1
Serge