D2L API:创建新部分

时间:2015-03-24 17:39:17

标签: c# json desire2learn

我正在构建一个接受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);

1 个答案:

答案 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" }

    });

^^我没有实例化用户定义的类类型,而是使用匿名类型。如果您无法重复使用构成帖子正文的类型,则这是设置请求的更有效方式。