Установите настройки приложения web facebook в коде (C #) - PullRequest
3 голосов
/ 02 марта 2011

Я пытаюсь установить настройки web.config в приложении facebook из кода, чтобы избежать непосредственной работы с файлом web.config.Я попытался пользовательский класс ConfigurationSection, а затем с помощью WebConfigurationManager для доступа к файлу web.config.Проблема в том, что я не могу получить экземпляр объекта конфигурации.Это мой код:

public class FacebookConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("appId")]
public string AppID
{
    get { return (string)base["appId"]; }
    set { base["appId"] = value; }
}

[ConfigurationProperty("appSecret")]
public string AppSecret
{
    get { return (string)base["appSecret"]; }
    set { base["appSecret"] = value; }
}

[ConfigurationProperty("canvasPage")]
public string CanvasPage
{
    get { return (string)base["canvasPage"]; }
    set { base["canvasPage"] = value; }
}

[ConfigurationProperty("canvasUrl")]
public string CanvasUrl
{
    get { return (string)base["canvasUrl"]; }
    set { base["canvasUrl"] = value; }
}

[ConfigurationProperty("cancelUrlPath")]
public string CancelUrlPath
{
    get { return (string)base["cancelUrlPath"]; }
    set { base["cancelUrlPath"] = value; }
}

public FacebookConfigurationSection()
{
}

}

И страница, которая использует это:

protected void Button1_Click(object sender, EventArgs e)
{
    Configuration config = WebConfigurationManager.OpenWebConfiguration("~");

    FacebookConfigurationSection _config = new FacebookConfigurationSection(); 
    _config = config.GetSection("facebookSettings") as FacebookConfigurationSection;

    //FacebookConfigurationSection config = (FacebookConfigurationSection)System.Configuration.ConfigurationManager.GetSection("facebookSettings");
    if (!string.IsNullOrEmpty(TextBox1.Text))
        _config.AppID = TextBox1.Text.ToString();

    if (!string.IsNullOrEmpty(TextBox2.Text))
        _config.AppSecret = TextBox2.Text.ToString();

    if (!string.IsNullOrEmpty(TextBox3.Text))
        _config.CanvasPage = TextBox3.Text.ToString();

    if (!string.IsNullOrEmpty(TextBox4.Text))
        _config.CanvasUrl = TextBox4.Text.ToString();

    _config.CancelUrlPath = "";
    config.Save();
}

Файл web.config выглядит следующим образом (часть, с которой я пытаюсь работать):

<configSections>
    <section type="Facebook.FacebookConfigurationSection, Facebook" name="facebookSettings" allowLocation="true" allowDefinition="Everywhere"/>
</configSections>

<facebookSettings
  appId = "xxxxxxxxxxxxxxx"
  appSecret = "xxxxxxxxxxxxxxxxxxxxxxxxx"
  canvasPage = "xxxxxxxxxxxxxxxxxx"
  canvasUrl ="xxxxxxxxxxxxxxxxxx"
  cancelUrlPath = "" />

При этом выдается «Ссылка на объект не установлена ​​для экземпляра объекта».на _config, который говорит мне, что ничего не возвращается.

Есть ли что-то "специфическое для Facebook", которое вызывает это?

Другая вещь;Я столкнулся с этим новым методом работы с настройками Facebook в коде:

FacebookContext.SetApplication( IFacebookApplication )

Я не смог найти хороший пример, который использует это.Кто-нибудь работал с этим раньше?

Ответы [ 5 ]

2 голосов
/ 30 марта 2011

Просто используйте

var sec = ConfigurationManager.GetSection("facebookSettings"); 

FacebookConfigurationSection config = (sec as Facebook.FacebookConfigurationSection); 

config.AppID и т. Д. И т. Д.

1 голос
/ 02 марта 2011

Попробуйте

section type="Facebook.FacebookConfigurationSection"

или, если у вас нет пространства имен

section type="FacebookConfigurationSection"

Полагаю, строка, которую вы закомментировали, тоже не сработала?

FacebookConfigurationSection config = (FacebookConfigurationSection)System.Configuration.ConfigurationManager.GetSection("facebookSettings");
0 голосов
/ 03 марта 2011

Ну, я не смог найти хороших примеров использования

FacebookContext.SetApplication( IFacebookApplication )

и я не уверен, что это можно сделать способом "ConfigurationSection" ...

Итак, я обманул ..

Я загрузил файл web.config в объект XmlDocument и манипулировал им таким образом ...

XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load(Server.MapPath("web.config"));

    XmlAttribute appId = XmlDoc.SelectSingleNode("//configuration//facebookSettings//@appId") as XmlAttribute;
    if (appId != null) appId.Value = TextBox1.Text.ToString();

    XmlAttribute appSecret = XmlDoc.SelectSingleNode("//configuration//facebookSettings//@appSecret") as XmlAttribute;
    if (appSecret != null) appSecret.Value = TextBox2.Text.ToString();

    XmlAttribute canvasPage = XmlDoc.SelectSingleNode("//configuration//facebookSettings//@canvasPage") as XmlAttribute;
    if (canvasPage != null) canvasPage.Value = TextBox3.Text.ToString();

    XmlAttribute canvasUrl = XmlDoc.SelectSingleNode("//configuration//facebookSettings//@canvasUrl") as XmlAttribute;
    if (canvasUrl != null) canvasUrl.Value = TextBox4.Text.ToString();

    XmlDoc.Save(Server.MapPath("web.config"));

Это работает, и в моем решении, все в порядке ...

0 голосов
/ 02 марта 2011

Я не совсем уверен, почему ваш код не работает, но попробуйте следующее, я попробовал пример с вашим файлом web.config, и он работает

System.Configuration.ConfigurationSection sec = System.Configuration.ConfigurationManager.GetSection("facebookSettings");
Facebook.FacebookConfigurationSection _config = (sec as Facebook.FacebookConfigurationSection); 

if (!string.IsNullOrEmpty(TextBox1.Text))
    _config.AppID = TextBox1.Text.ToString();

if (!string.IsNullOrEmpty(TextBox2.Text))
    _config.AppSecret = TextBox2.Text.ToString();

if (!string.IsNullOrEmpty(TextBox3.Text))
    _config.CanvasPage = TextBox3.Text.ToString();

if (!string.IsNullOrEmpty(TextBox4.Text))
    _config.CanvasUrl = TextBox4.Text.ToString();

_config.CancelUrlPath = "";
config.Save();
0 голосов
/ 02 марта 2011

Возможно, проблема в разделе <facebookSettings>, попробуйте в следующем формате:

<facebookSettings>
    <add key="appId " value="xxxxxxxxxxxxxxxx" />
    <add key="appSecret " value="xxxxxxxxxxxxxxxxxxxxxxxxxxx" />
            ...
            ...
<facebookSettings>
...