UGC发布内容

Joh*_*ohn 7 ugc tridion tridion-content-delivery tridion-2011

我只是想运行一个使用UGC Web服务发布UGC评论的小原型.

代码示例如下.我收到来自Web服务的403响应,表示我没有被授权使用该服务,所以我认为我需要创建一个身份验证标头?有没有人有任何关于如何使用UGC网络服务发表评论的例子?

string ugcData = "{d\":{\"Content\":\"FROM WEB SERVICE\",\"Status\":2,\"ItemPublicationId\":\"68\",\"ItemId\":\"17805\",\"ItemType\":\"16\",\"Id\":0,\"ModeratedDate\":\"\",\"LastModifiedDate\":\"\",\"CreationDate\":\"\",\"Score\":0,\"Moderator\":\"\",\"User\":{\"Id\":\"DOMAIN%5Cbsmith\",\"Name\":\"Bill Smith\"}\"}";

WebServiceClient ugcCall = new WebServiceClient();

ugcCall.UploadString("/PostData", "POST", ugcData);
Run Code Online (Sandbox Code Playgroud)

MTIA.

约翰

Dan*_*agu 9

您应该尝试发布评论集合:

ugcCall.UploadString("/Comments", "POST", ugcData);
Run Code Online (Sandbox Code Playgroud)

然后,您将看到您缺少CreationDate,您需要在其中添加以下内容:

\"CreationDate\":\"/Date(1359457694472)\"
Run Code Online (Sandbox Code Playgroud)

(我实际上没有检查你是否需要更多的报价).对于JSON字符串中日期的格式,请检查odata规范.

如果仍有问题,请尝试更改DOMAIN%5Cbsmith为另一个虚拟值(test例如' ').

如果这还不够,那么也许您可以查看UGC WebService生成的日志,并尝试制作一些堆栈跟踪.

这里需要注意的另一件事是:需要在Web.config中正确定义UGC属性,以便发布帖子.

希望这可以帮助.


Qui*_*ijn 7

我使用了与您所遵循的相同的方法,即使用生成的代理用于UGC Web服务.为了创建正确的json,我们使用了标准的.NET JavaScriptSerializer.我认为这使得代码更容易阅读.

这是一个代码片段,也许它有点帮助.当然,您需要确保设置变量.

 WSR_ContentDelivery.User user = new WSR_ContentDelivery.User
 {
        Id = GetUserId(),
        Name = username,
        EmailAddress = email,
        ExternalId = website
 };

 WSR_ContentDelivery.Comment comment = new WSR_ContentDelivery.Comment
 {
        CreationDate = DateTime.UtcNow,
        LastModifiedDate = DateTime.UtcNow,
        ItemPublicationId = tcmUri.PublicationId,
        ItemId = tcmUri.ItemId,
        ItemType = tcmUri.ItemTypeId,
        Content = content,
        User = user,
        Status = Statuses.SubmittedNeedsModeration,
        Score = 0
 };

 JavaScriptSerializer serializer = new JavaScriptSerializer();
 return WSClient.UploadString("/Comments", "POST", "{d:" + 
        serializer.Serialize(comment) + "}", user.Id);
Run Code Online (Sandbox Code Playgroud)