我可以将JSON / XML字符串作为POST请求发布到REST ServiceStack吗?

时间:2011-11-07 10:31:55

标签: servicestack

我目前正致力于ServiceStack,对此非常陌生。 (非常有趣;他们说他们比WCF和REST WCF更好(GET,POST,PUT,DELETE))

我还发现它很有帮助,可以用更少的代码来快速运行它。

目前我想发布数据。我创建了类的对象并发送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<.....>

那么,如果我可以在ServiceStack的POST事件中生成JSON字符串并对其进行反序列化并在数据库中插入数据,那么最好不要发布整个对象?

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

我不确定你想要传递原始JSON字符串的动机是什么,但是如果要确保只传入一个小的JSON有效负载,那么你可以自信地使用Json / Jsv ServiceClients,因为它们不会t包含空值,因此只会传递您填充的字段。

您可以直接使用Json序列化程序验证进行系列化的内容。

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

如果您只是想测试/调试您的服务,最好的方法是通过使用查询字符串填充字段来简单地使用浏览器,即:

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

在大多数情况下,如果要传入原始JSON字符串,则需要使用另一个HTTP客户端,在这种情况下,最好不要调用Web服务POST表单数据,因为它本身都支持所有HTTP客户端,您不需要JSON序列化程序。例如这里是如何通过带有curl的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浏览器发布的,因此服务堆栈将返回HTML,但如果您想查看JSON结果,则只需将?format = json 附加到网址。

或者您只需使用JavaScript和jQuery POST到您的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"
});

使用Web浏览器调试服务的好处是,您可以使用内置网络检查器(即Chrome中的Web检查器)查看Web服务的完整请求/响应。

如果您不熟悉它,我还建议熟悉Fiddler,以便您轻松分析HTTP流量。

答案 1 :(得分:1)

根据我的知识,你需要传递对象(DTO请求)。 但是您可以使用json发布请求,如果您想要发布json请求的示例,请查看https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingRestAndJson.cs