gpt4 book ai didi

c# - 使用 C# 在 Drupal 中创建节点

转载 作者:行者123 更新时间:2023-11-30 16:26:21 25 4
gpt4 key购买 nike

我需要制作一个(“webservice”)c# 应用程序,它可以使用 xmlrpc 为/从 drupal 7 创建/更新/删除节点。每次我运行我的应用程序时,我都会从 xmlrpc 文件(库)中得到错误。我试图找到使用 xmlrpc 连接到 drupal 的 C# 的代码/文档,但没有成功。如果您能为我指出正确的方向,或者与我分享一些 C# 代码,我会很高兴。

{
[XmlRpcUrl("http://testing/testserver")]
public interface IDrupalServices
{
[XmlRpcMethod("node.get")]
XmlRpcStruct NodeLoad(int nid, string[] field);
[XmlRpcMethod("node.save")]
void NodeSave(XmlRpcStruct node);
}

public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();

IDrupalServices drupal = XmlRpcProxyGen.Create<IDrupalServices>();

int nid = 227;
string[] fields = new string[] { };

XmlRpcStruct node = drupal.NodeLoad(nid, fields);

string teaser = node["teaser"].ToString();
welcomeTxt.Text = teaser;
}

private void button1_Click(object sender, EventArgs e)
{
string title = txtTitle.Text;
string body = txtBody.Text;

IDrupalServices drupal = XmlRpcProxyGen.Create<IDrupalServices>();

XmlRpcStruct node = new XmlRpcStruct();

node["id"] = 1001;
node["title"] = title;
node["body"] = body;
node["teaser"] = body;
node["format"] = 1;
node["type"] = "webservice";
node["promote"] = false;

drupal.NodeSave(node);
MessageBox.Show("The post was been created!");

}
}
}

运行后出现错误:服务器返回错误异常:[-32601] 服务器错误。未指定请求的方法 node.get。 - 在 XmlRpcSerializer.cs 中

谢谢,弗罗林

最佳答案

如果您使用的是 Drupal 7,那么您必须使用没有 node.get 方法(或碰巧没有 node.save)的 Services 3。它们分别被替换为 node.retrievenode.create & node.update

您可以在服务模块文件夹的 resources/node_resource.inc 文件中查看所有可用的方法。

更新

节点在内部使用 drupal_execute 提交,这是用于提交表单的函数。由于正文是 Drupal 中的一个字段,因此它应该是这种格式的多维数组(PHP 版本):

$data["body"][$language][0]["value"]

$language 要么是节点的特定语言,要么是 und 未定义的语言(除非您处理的是多语言站点 und 通常是要走的路)。您需要构建一个类似于 C# 代码中的数组,Drupal 应该保存它。

另一个更新

Java XML-RPC client example for Services使用 HashMap 类型来执行此操作,所以我最好的猜测是您可以使用 Dictionary(尽管它看起来不必要地复杂):

var innerValue = new Dictionary<string, string>();
innerValue.Add("value", txtBody.Text);

var language = new Dictionary<int, Dictionary<string, string>>();
language.Add(0, innerValue);

var body = new Dictionary<string, Dictionary<int, Dictionary<string, string>>>();
body.Add("und", language);

node["body"] = body;

我已经有几年没用 C# 编写代码了,所以请原谅其中的任何错误。我也很确定它可以更有效地声明,但老实说我已经忘记了大部分语言!

关于c# - 使用 C# 在 Drupal 中创建节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com