2011-03-02 104 views
3

我试图在代码中设置facebook应用程序中的web.config设置,以避免直接使用web.config文件。 我试过了一个自定义的ConfigurationSection类,然后使用WebConfigurationManager来访问web.config文件。问题是我无法获得Configuration对象的实例。这是我的代码:在代码中设置facebook应用程序web.config设置(C#)

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设置这种新的工作方法:

FacebookContext.SetApplication(IFacebookApplication) 

我一直没能找到一个使用一个很好的例子。 有没有人曾与此工作?

回答

0

嗯,我找不到使用

FacebookContext.SetApplication(IFacebookApplication) 

任何好的例子,我不知道它甚至有可能做到这一点的“配置节”的方式...

所以,我被骗了..

我装的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

也许问题是与你的<facebookSettings>节尝试在以下格式:

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

试过了,同样的错误... – Soeren 2011-03-02 11:05:56

1

尝试

section type="Facebook.FacebookConfigurationSection" 

,或者如果你没有命名空间

section type="FacebookConfigurationSection" 

我承担你注释掉的行也不起作用?

FacebookConfigurationSection config = (FacebookConfigurationSection)System.Configuration.ConfigurationManager.GetSection("facebookSettings"); 
+0

更改类型给出了相同的错误。另外,我假设我必须保持原样。 – Soeren 2011-03-02 11:51:24

0

我不完全知道为什么你的代码不能正常工作,但尝试下面,我已经尝试了样品与你的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

我现在看到我的代码基本上和你注释掉的代码行相同,但是如果你调试了sec部分,看看它是否有值? – 2011-03-02 11:14:32

2

只需使用

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

FacebookConfigurationSection config = (sec as Facebook.FacebookConfigurationSection); 

配置。AppID等等

+0

您可以通过选择它并按下{}按钮来格式化您的代码。你可以找到更多的信息关于什么是支持[这里](http://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-overflow-server-fault-and-超级用户) – 2011-03-29 21:47:22

相关问题