我发现你是唯一一个回答服务堆栈的人,我没有收到电子邮件以及你提供给我的最后一个问题,看起来很好。
我看过你的个人资料,因为你是mythZ的主要创始人,我似乎再次问你我的问题。
对于我的一个问题,将JSON格式的POST数据发送到服务堆栈,我感谢您的回答。 你的答案是正确的,但在我的情况下,我有以下案例。让我更详细地描述。
我见过服务堆栈的“Hello World”示例。我有链接 https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingRestAndJson.cs
就我而言, 我有控制台应用程序,它调用服务堆栈(在数据库中插入数据) 现在,在那个控制台应用程序中,我创建了一个类(class1),它在服务堆栈中具有相同的属性。
我在控制台应用程序中为该类的属性赋值,并将整个对象POST到服务堆栈。 Syntex如下所示
JsonServiceClient client = new JsonServiceClient(myURL);
MYclass cls= MakeObjectForServiceStackToInsertData();
var res = client.Post<MYClass>("/postrequest", cls);
我如上所述使用POST。这似乎没关系。 在OnPOST事件的服务堆栈结束时,我获取此数据并插入数据库。 它对我来说很好。
现在我的客户希望我们需要以任何格式传递数据。 JSON / XML。 我知道有可能当你向我提供一个“Hello world”示例链接时,会在那里提及。
但我发现的是,他们使用ajax / Jquery将数据发布到服务中。 在我的情况下这是控制台应用程序,所以我无法使用ajax / Jquery。 我想知道,是否有可能以JSON格式传递数据并在我的情况下进行操作。
非常感谢您提前。
答案 0 :(得分:6)
因此,如果您要将任何无类型和自由文本 JSON 或 XML 发布到ServiceStack,那么您将无法使用ServiceStack的泛型类型C#客户端(即其JsonServiceClient,XmlServiceClient等)。相反,您只需要使用任何基本的Http客户端,例如.NET附带的 HttpWebRequest 。
正如我前面提到的,发送自由文本json或xml不是调用ServiceStack Web服务的常规方式(即建议使用类型化DTO和通用服务客户端之一),但是因为你在这里问过是关于如何调用ServiceStack's Hello World示例Web服务的独立,无依赖的示例:
const string RemoteUrl = "http://www.servicestack.net/ServiceStack.Hello/servicestack/hello";
var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method = "POST";
httpReq.ContentType = httpReq.Accept = "application/json";
using (var stream = httpReq.GetRequestStream())
using (var sw = new StreamWriter(stream))
{
sw.Write("{\"Name\":\"World!\"}");
}
using (var response = httpReq.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
Assert.That(reader.ReadToEnd(), Is.EqualTo("{\"Result\":\"Hello, World!\"}"));
}
var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method = "POST";
httpReq.ContentType = httpReq.Accept = "application/xml";
using (var stream = httpReq.GetRequestStream())
using (var sw = new StreamWriter(stream))
{
sw.Write("<Hello xmlns=\"http://schemas.servicestack.net/types\"><Name>World!</Name></Hello>");
}
using (var response = httpReq.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
Assert.That(reader.ReadToEnd(), Is.EqualTo("<HelloResponse xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.servicestack.net/types\"><Result>Hello, World!</Result></HelloResponse>"));
}
我已将上述示例添加到此Runnable Unit Test中。
我建议熟悉HTTP流量分析器工具,以便您可以轻松查看从Web服务发送和接收的HTTP流量。从那时起,能够锻炼如何打电话给您的服务变得微不足道。一些出色的HTTP流量分析器包括: