2013-05-03 118 views
3

我有一個我創建的dnn模塊,使用WebAPI從服務器檢索數據沒有問題。但是,當我嘗試執行更新時,無論我嘗試什麼,我都會繼續收到錯誤。在Firebug看,我可以張貼的數據:如何執行DotNetNuke WebAPI更新/刪除?

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

但是,當我調試,我看到的只是默認(null.setnull)值(布爾=假,INT = 0,串=空)。

然後,當然的反應是這沒有什麼好和結果: (http://www.virtual-essentials.com/personal/firebug2.png

我試過的事情,我能想到的每一種組合,但不能得到這個想通了,我快瘋了。

這裏是AJAX調用: // //Ü操作 - 更新 self.updateTestimonial =函數(objItem){ VAR方法= 「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; 
     } 

    } 

任何幫助是真誠的感謝!

回答

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