【问题标题】:Can I post JSON/XML string as a POST request to REST ServiceStack?我可以将 JSON/XML 字符串作为 POST 请求发布到 REST ServiceStack 吗?
【发布时间】:2011-11-07 10:31:54
【问题描述】:

我目前正在研究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-&gt;Value) 创建一个 JSON 字符串,并使用服务堆栈将其发布到服务器以发送数据。

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

那么,与其发布整个对象,不如我可以制作JSON字符串并在ServiceStack的POST事件中反序列化它并在DB中插入数据?

有什么想法吗?

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

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

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

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

    在大多数情况下,如果您想传入原始 JSON 字符串,您将需要使用另一个 HTTP 客户端,在这种情况下,您最好调用 Web 服务 POST'ing 表单数据,因为它本机支持所有 HTTP客户端,您不需要 JSON 序列化程序。例如这是通过 HTTP POST 和 curl 调用相同服务的方法:

    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>
    

    由于您是从网络浏览器发布的,Service Stack 将返回 HTML,但如果您想查看 JSON 结果,您只需将 ?format=json 附加到 url。

    或者您也可以简单地使用 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"
    });
    

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

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

    【讨论】:

    • 感谢您的回答,就我而言,我想知道 COnsole 应用程序中的 JSON 格式对我来说是否可行。有关更多详细信息,请查看我的新问题更详细的stackoverflow.com/questions/8046538/…
    【解决方案2】:

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

    【讨论】:

    • 在那个例子中,什么是........using DtoOperations = Sakila.ServiceModel.Version100.Operations.SakilaService;
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多