Могу ли я опубликовать строку JSON / XML как запрос POST к REST ServiceStack? - PullRequest
9 голосов
/ 07 ноября 2011

Я сейчас работаю над ServiceStack, просто очень плохо знаком с ним.(Довольно интересно, они говорят, что они лучше, чем WCF и REST WCF (GET, POST, PUT, DELETE))

Я также нашел это полезным, с меньшим количеством кода, чтобы сделать и запустить его быстро.

В настоящее время, когда я хочу опубликовать данные.Я делаю объект класса и отправляю запрос POST.

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

С помощью приведенного выше кода вы можете понять, что я делаю.Я думаю, я не ошибаюсь.Пожалуйста, дайте мне знать, если вы не уверены.

Могу ли я сделать строку в JSON для моего класса (KEY->Value) в моем клиентском приложении (вручную) и отправить его с помощью стека служб на сервер для отправки данных.

т.е.

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

Так что вместо размещения всего объекта лучше, если я смогу создать строку JSON и десериализовать ее в событии POST ServiceStack и вставить данные в БД?

Есть идеи?

Ответы [ 2 ]

8 голосов
/ 07 ноября 2011

Я не уверен, что вы хотите передать в виде необработанной строки JSON, но если вы хотите передать только небольшую полезную нагрузку JSON, вы можете с уверенностью использовать ServiceClients Json / Jsv, поскольку они неt включает нулевые значения, поэтому будет проходить только те поля, которые вы заполняете.

Вы можете проверить, что сериализуется, используя сериализатор Json напрямую.

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

Если вы просто хотите протестировать / отладить свой сервис, лучший способ - просто использовать браузер одним из следующих способов:заполнение полей строкой запроса, например:

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

В большинстве случаев, когда вы хотите передать необработанную строку JSON, вам потребуется использовать другой клиент HTTP, и в этом случае вам лучше вызватьвместо этого веб-сервисы отправляют данные формы POST, поскольку они изначально поддерживаются всеми клиентами HTTP, и вам не нужен сериализатор JSON.например, вот как вызвать ту же службу через HTTP POST с помощью curl:

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

Существует много других способов вызова той же службы, см. Пример Hello World из стека служб дляПолный список.Вот как вы бы назвали это, используя HTML:

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

Поскольку вы публикуете его из веб-браузера, стек обслуживания возвращает HTML, но если вы хотите увидеть результат JSON, вам просто нужно добавить ? format = json на URL.

Или вы можете просто использовать JavaScript и jQuery для POST в вашем веб-сервисе, приведенный ниже пример вернет результаты в виде 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-трафик.

1 голос
/ 07 ноября 2011

Насколько мне известно, вам нужно передать объект (запрос DTO).Но вы можете сделать запрос с помощью json, если вы хотите, чтобы пример опубликовал запрос json, посмотрите на https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingRestAndJson.cs

...