在代码中设置facebook应用程序web.config设置(C#)
我试图在代码中设置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)
我一直没能找到一个使用一个很好的例子。 有没有人曾与此工作?
嗯,我找不到使用
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"));
它的工作原理,并在我的解决方案,它的确定...
也许问题是与你的<facebookSettings>
节尝试在以下格式:
<facebookSettings>
<add key="appId " value="xxxxxxxxxxxxxxxx" />
<add key="appSecret " value="xxxxxxxxxxxxxxxxxxxxxxxxxxx" />
...
...
<facebookSettings>
尝试
section type="Facebook.FacebookConfigurationSection"
,或者如果你没有命名空间
section type="FacebookConfigurationSection"
我承担你注释掉的行也不起作用?
FacebookConfigurationSection config = (FacebookConfigurationSection)System.Configuration.ConfigurationManager.GetSection("facebookSettings");
更改类型给出了相同的错误。另外,我假设我必须保持原样。 – Soeren 2011-03-02 11:51:24
我不完全知道为什么你的代码不能正常工作,但尝试下面,我已经尝试了样品与你的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部分,看看它是否有值? – 2011-03-02 11:14:32
只需使用
var sec = ConfigurationManager.GetSection("facebookSettings");
FacebookConfigurationSection config = (sec as Facebook.FacebookConfigurationSection);
配置。AppID等等
您可以通过选择它并按下{}按钮来格式化您的代码。你可以找到更多的信息关于什么是支持[这里](http://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-overflow-server-fault-and-超级用户) – 2011-03-29 21:47:22
试过了,同样的错误... – Soeren 2011-03-02 11:05:56