如何执行DotNetNuke WebAPI更新/删除?

时间:2013-05-03 02:04:35

标签: api controller dotnetnuke

我已经创建了一个dnn模块,使用WebAPI从服务器检索数据没有问题。但是,当我尝试执行更新时,无论我尝试什么,我都会继续收到错误。在Firebug中查看,我可以发布数据:

!(http://www.virtual-essentials.com/personal/firebug1.png

但是,当我调试时,我只看到默认值(null.setnull)(bool = false,int = 0,string = empty)。

然后,当然响应并不好,结果如下: !(http://www.virtual-essentials.com/personal/firebug2.png

我已经尝试了我能想到的所有事情的组合,但是无法解决这个问题而且我很疯狂。

这是ajax调用:     // U //操作 - 更新     self.updateTestimonial = function(objItem){         var method =“UpdateTestimonial”;         self.UpdatePublishStatus(objItem);

    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: sf.getServiceRoot('VirtualEssentials/Testimonials') + "TestimonialWeb/" + method,
        beforeSend: sf.setModuleHeaders,
        data: ko.toJSON({ item: new TestimonialInfoDTO(objItem.TestimonialID(), objItem.IsPublished())}),
        success: function (data) {
            self.userAlertText(objItem.Testimonial() + ' changes have been saved');
            //self.getTestimonials(); //get the new data after updates
        },
        error: function (xhr, status, error) {
            self.userAlertText('OOPS! Error updating ' + objItem.Testimonial + '<br />' + (error));
            //put the status back
            self.UpdatePublishStatus(objItem);

        }
    });
};

以下是WebAPI控制器调用:

    [HttpPost]
    [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)]
    public System.Net.Http.HttpResponseMessage UpdateTestimonial(TestimonialInfoDTO item)
    {
        try
        {
            Controller.TestimonialController objController = new Controller.TestimonialController();
            objController.PublishTestimonial(item.TestimonialID, item.IsPublished);
        }
        catch (HttpResponseException ex)
        {
            return ex.Response;
        }

    }

真诚地感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

一旦您寻求帮助,您就会找到解决方案。我提取了核心期刊模块的源代码,发现他们发布的帖子数据有点不同。我修改了我发送的json字符串,它都完成了。我想因为该方法的参数是:

 UpdateTestimonial(TestimonialInfoDTO item)

它期待:

 {"item":{"TestimonialID":14,"IsPublished":false}}

但事实证明它真正想要的是:

{"TestimonialID":14,"IsPublished":false}

无论如何,这是我做的改变所做的;我只是改变了我建立数据的方式。

    var data = new TestimonialInfoDTO(objItem.TestimonialID(), objItem.IsPublished());

    $.ajax({
   ...
    data: ko.toJSON(data),

我希望这有助于某人。目前还没有很多Dnn WebAPI文档。

谢谢! Briana