2012-07-26 44 views
2
$.ajax({ 
     type: 'POST', 
     url: "/api/student", 
     data:'{"x":3,"y":2}', 
     dataType: "json", 
     complete: function (r, s) { 
      debugger; 
     }, 

     success: function(response){ 
      debugger; 
     }, 

     contentType: "application/json" // !!!!!!!!!!!! The reason of problem. I could see Json on firebug. It was false-positive for my code ! 

    }); 

我跟蹤過Firebug。 Firebug識別並顯示JSON對象。爲什麼servicestack無法在json post請求上進行模型綁定?

此代碼訪問RestServiceBase的OnPost方法。但模型綁定不起作用。 屬性名稱必須在Json對象和C#類上完全相同嗎?

或者我錯過了什麼? (是的,U失去了一些東西!)

PS:我已經改變URL爲 「/ API /學生/ JSON/asynconeway」 希望,但後來我得到404錯誤

回答

0

我必須添加

dataType:「application/json」property to ajax request!

0

這裏我的一些代碼:

  $.ajax({ 
       type: "POST", 
       url: "/artist/delete", 
       data: { id: itemId }, 
       success: function() { 
        $("div#" + itemId).fadeOut(function() { $(this).remove(); }); 
       } 
      }); 

編輯:對不起,我誤會了你想要什麼有,所以我會問你一個問題,你爲什麼JSON發送到服務器,你可以作出這樣的功能:

[HttpPost] 
     public ActionResult Delete(int id) 
     { 
      var artist = _db.Artists.Where(x => x.ID == id).SingleOrDefault(); 
      if (artist == null) 
      { 
       return Content("false"); 
      } 
      else 
      { 
       _db.Artists.DeleteOnSubmit(artist); 
       _db.SubmitChanges(); 
       return RedirectToAction("Post"); 
      } 
     } 

EDIT2:並且在此處有語法錯誤data:'{"x":3,"y":2)}',
EDIT3:另一個語法錯誤

 } 
     } 
    }); 

在的代碼的末尾。

+0

這是簡化的示例。通常我會向服務器發送非常大的複雜對象。 – ozz 2012-07-26 22:05:46

+0

不,這是編修錯誤:)我在我的帖子中糾正。 – ozz 2012-07-26 22:12:31

4

ServiceStack確實 model綁定JSON POST(以及任何受支持的內容類型,包括x-www-form-urlencoded)。

ServiceStack.Examples有很多這樣的例子。

此代碼訪問RestServiceBase的OnPost方法。但模型綁定 沒有工作。

你還沒有展示你試圖綁定到的DTO。但是,這JSON

{"x":3,"y":2} 

將映射到一個匹配的DTO,e.g:

public class Student { 
    public int X { get; set; } 
    public int Y { get; set; } 
} 

做屬性名必須是JSON對象和C#類的完全一樣?

它們必須匹配當然的名稱,但不區分大小寫,見上。

PS:我已經改變URL爲 「/ API /學生/ JSON/asynconeway」 有希望,但 後來我得到404錯誤

這是錯誤的。如果你想使用automatic pre-defined route,正確的網址是:

/api/json/asynconeway/student 

假設你請求DTO被稱爲Student

+0

是我的requestDTO是學生。路徑。在App.Host中添加(「/ student」)。我也測試了/ api/json/asynconeway/student並且得到了404錯誤。 「json中的額外屬性」問題? – ozz 2012-07-26 23:17:04

+0

這不是問題,你在'/ api'託管? '/ metadata'頁面說的是什麼網址?否則,您需要發佈您的Service + Web.Config的要點 – mythz 2012-07-26 23:25:57

+0

我發現我的錯誤。我正在添加答案。 – ozz 2012-07-26 23:26:10

相關問題