7

我只是想运行一个使用 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);

MTIA。

约翰

4

2 回答 2

9

您应该尝试在评论集合上发帖:

ugcCall.UploadString("/Comments", "POST", ugcData);

然后你会看到你错过了 CreationDate,你需要添加到你的实体的时刻,比如:

\"CreationDate\":\"/Date(1359457694472)\"

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

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

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

这里还需要注意一件事:需要在 Web.config 中正确定义 UGC 属性才能使帖子发生。

希望这可以帮助。

于 2013-01-29T11:15:09.860 回答
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);
于 2013-01-29T12:15:06.577 回答