我正在构建一个接受orgunitid的应用程序,并创建一个与orgunitid相关联的新部分。我正在使用c#。
这是我的代码。
string orgUnitId = textBoxOrgUnitId.Text;
string sectionCreateRoute = "/d2l/api/lp/1.0/" + orgUnitId + "/sections/";
var client = new RestClient(host);
var valenceAuthenticator = new D2L.Extensibility.AuthSdk.Restsharp.ValenceAuthenticator(userContext);
var requestCreateSection = new RestRequest(sectionCreateRoute, Method.POST);
valenceAuthenticator.Authenticate(client, requestCreateSection);
而且,我应该提供的JSON数据看起来像这样。
{
"Name": "Test Section",
"Code": "" ,
"Description": { "Content": "Test", "Type" : "HTML" }
}
如何使用此JSON数据创建新部分。
谢谢,
菲利普
我已经尝试过这段代码,但它仍然没有创建一个部分。
string orgUnitId = textBoxOrgUnitId.Text;
string sectionCreateRoute = "/d2l/api/lp/1.0/" + orgUnitId + "/sections/";
var client = new RestClient(host);
var valenceAuthenticator = new D2L.Extensibility.AuthSdk.Restsharp.ValenceAuthenticator(userContext);
var requestCreateSection = new RestRequest(sectionCreateRoute, Method.POST);
requestCreateSection.AddJsonBody(new
{
Name = "Section Test",
Code = "156156",
Description = new { Content = "Test", Type = "Html" }
});
valenceAuthenticator.Authenticate(client, requestCreateSection);
答案 0 :(得分:0)
因为您正在使用ResSharp,我建议您调用以下方法;
public IRestRequest AddJsonBody(object obj)
{
this.RequestFormat = DataFormat.Json;
return this.AddBody(obj, "");
}
但是,为了使用它,您需要一个C#对象来表示该数据。类定义看起来像这样;
public class NewSectionPostBody
{
public string Name;
public string Code;
public SectionContentType Description;
}
public class SectionContentType
{
public string Content;
public string Type;
}
使用这些和您现有的代码,我可以执行以下操作;
var requestCreateSection = new RestRequest(sectionCreateRoute, Method.POST);
// use object initializer to make instance for body inline
requestCreateSection.AddJsonBody(new NewSectionPostBody{
Name="Test Section",
Code=String.Empty,
Description= new SectionContentType { Content="Test", Type="HTLM" }
});
valenceAuthenticator.Authenticate(client, requestCreateSection);
RestSharp将对象处理为json字符串序列化,因此您基本上可以将任何对象传递给该方法,并将生成的json用作帖子正文。
最后一件事;如果这是一次性请求,您甚至不需要定义我用于身体的类型。如果你只是删除类名,你可以使用相同的内联启动构造来创建一个匿名类型;
requestCreateSection.AddJsonBody(new {
Name="Test Section",
Code=String.Empty,
Description= new { Content="Test", Type="HTLM" }
});
^^我没有实例化用户定义的类类型,而是使用匿名类型。如果您无法重复使用构成帖子正文的类型,则这是设置请求的更有效方式。