2011-11-07 51 views
9

我目前正在研究ServiceStack,只是非常新。 (非常有趣;他們說它們比WCF和REST WCF(GET,POST,PUT,DELETE)更好)我可以將JSON/XML字符串作爲POST請求發佈到REST ServiceStack嗎?

我還發現它很有幫助,代碼少,運行速度快。

當前我想要發佈數據。我創建類的對象併發送POST請求。

JsonServiceClient client = new JsonServiceClient(myURL); 
MYclass cls= MakeObjectForServiceStackToInsertData(); 
var res = client.Post<MYClass>("/postrequest", cls); 

通過上面的代碼,你可以明白,什麼是我做的東西。我想我沒有錯。如果您感到困惑,請讓我知道。

我可以在我的客戶端應用程序(手動)中爲我的類(KEY->Value)在JSON中創建一個字符串,並使用服務堆棧將其發佈到服務器以發送數據。

string str = myJsonString(); 
var res = client.Post<.....> 

因此,不要張貼整個對象,它是更好,如果我可以讓JSON字符串和ServiceStack的POST事件反序列化,並在數據庫中插入數據?

有什麼想法?

回答

8

我不確定你的動機是想傳遞一個原始的JSON字符串,但如果它是爲了確保您只傳遞一個小的JSON負載,您可以放心地使用Json/Jsv ServiceClients,因爲它們不包含空值,因此只會傳遞填充的字段。

您可以驗證通過直接使用Json序列化器進行序列化的內容。

Console.WriteLine(JsonSerializer.SerializeToString(cls)); 

如果你只是想測試/調試你的服務,最好的辦法是簡單地通過任何填充帶查詢的字段,即使用的瀏覽器:

http://localhost/myservice/postrequest?Field1=value1&Field2=value2 

在大多數情況下,你想要傳入一個原始的JSON字符串,您將需要使用另一個HTTP客戶端,在這種情況下,最好是調用Web服務POST'ing表單數據,因爲它本機支持所有HTTP客戶端,並且您不需要JSON序列化器來做。例如這裏是如何的捲曲調用相同的服務,通過HTTP POST:

curl -d "Field1=value1&Field2=value2" http://localhost/myservice/postrequest 

有很多其他的方法可以調用相同的服務,請參閱Service Stack's Hello World example的完整列表。這裏是你將如何使用HTML調用它:

<form action="http://localhost/myservice/postrequest" method="POST"> 
    <input type="text" name="Field1" value="value1" /> 
    <input type="text" name="Field2" value="value2" /> 
</form> 

既然你從Web瀏覽器發佈的IT服務堆棧將返回HTML,但如果你想看到的JSON結果,你只需將格式= JSON?到網址。

或者你可以簡單地使用JavaScript和jQuery張貼到你的Web服務,下面的例子將返回結果爲JSON其獲得的自動轉換成JS對象:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/myservice/postrequest", 
    data: {Field1: "value1", Field2: "value2"}, 
    success: function(r) { alert(r.Result) }, 
    dataType: "application/json" 
}); 

有關使用的好處網頁瀏覽器來調試您的服務的是,您可以使用內置的網絡檢查器(即Chrome瀏覽器中的Web檢查器)來查看Web服務的完整請求/響應。

如果您不熟悉它,我還建議您熟悉Fiddler,它允許您輕鬆分析HTTP流量。

+0

我很感謝你的回答,在我的情況下,我想知道是否可以從我的JSON格式的COnsole應用程序。欲瞭解更多詳情,請看看我的新問題更詳細http://stackoverflow.com/questions/8046538/json-format-data-from-console-application-to-service-stack –

相關問題