【问题标题】:Set facebook application web.config settings in code (C#)在代码中设置 facebook 应用程序 web.config 设置(C#)
【发布时间】:2011-03-02 10:41:49
【问题描述】:

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

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 )

我还没有找到一个很好的例子来使用它。 以前有人用过这个吗?

【问题讨论】:

    标签: c# facebook web-config settings


    【解决方案1】:

    随便用

    var sec = ConfigurationManager.GetSection("facebookSettings"); 
    
    FacebookConfigurationSection config = (sec as Facebook.FacebookConfigurationSection); 
    

    config.AppID 等

    【讨论】:

    • 您可以通过选择代码并按下 {} 按钮来格式化您的代码。你可以找到更多关于其他支持的信息here
    【解决方案2】:

    试试

    section type="Facebook.FacebookConfigurationSection"
    

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

    section type="FacebookConfigurationSection"
    

    我认为您注释掉的那行也不起作用?

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

    【讨论】:

    • 更改类型会产生相同的错误。另外,我认为我必须保持这些设置不变。
    【解决方案3】:

    我不完全确定您的代码为什么不起作用,但请尝试以下操作,我已尝试使用您的 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();
    

    【讨论】:

    • 我现在看到我的代码与您注释掉的行基本相同,但是如果您在 sec 部分进行调试,看看它是否有价值?
    【解决方案4】:

    也许问题出在您的&lt;facebookSettings&gt; 部分,请尝试以下格式:

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

    【讨论】:

      【解决方案5】:

      嗯,我找不到任何使用的好例子

      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"));
      

      它有效,在我的解决方案中,没关系......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-26
        • 2011-06-02
        • 2019-12-09
        • 2012-04-02
        • 2020-09-30
        • 1970-01-01
        相关资源
        最近更新 更多