2011-03-02 101 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

相關問題