Использование RESTful JSON API с использованием WCF - PullRequest
3 голосов
/ 07 августа 2009

Я новичок в WCF (и довольно ржавый с .NET в целом), поэтому есть определенный шанс, что это ответ на вопрос, и я просто пропустил его.

Я создаю приложение ASP.NET MVC, которое будет использовать RESTful на основе JSON API для своего бэкэнда. Я искал разные варианты общения с таким API в .NET, и похоже, что WCF - самый популярный выбор на сегодняшний день. Чтение еще раз в WCF Теперь у меня есть базовый потребительский класс, который делает запрос, и это начало.

Но теперь мне нужно больше с этим работать, и я не добиваюсь больших успехов. Мне нужно отправить POST в API с телом JSON. Вот что у меня есть:

using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;

namespace APIConsumer {
    [ServiceContract]
    public interface IAPIClient {
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            BodyStyle = WebMessageBodyStyle.Bare,
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "/session/login.json"
            )]
        string SessionLogin(string login_name);
    }

    public class APIClient : ClientBase<IAPIClient>, IAPIClient {
        public string SessionLogin(string login_name) {
            return this.Channel.SessionLogin(login_name);
        }
    }
}

То, что я не могу понять, - это правильный способ передачи a) ЛЮБЫХ данных в теле POST и b) правильного сериализованного объекта .NET как JSON в теле POST. Есть хороший пример того, как это где-то работает?

Ответы [ 3 ]

2 голосов
/ 07 августа 2009

Если вам интересно, как отформатировать тело JSON вашего POST для операции SessionLogin, в вашем случае это было бы очень просто. Данные JSON будут просто:

{"login_name": "someuser"}

Платформа WCF будет обрабатывать сопоставление этих данных с вашей операцией и передавать значение "someuser" параметру login_name для вас. Это то, что вам нужно, или вам нужен был более сложный сценарий?

1 голос
/ 07 августа 2009

Взгляните на Как: сериализировать и десериализовать данные JSON в MSDN. Вам также необходимо убедиться, что в вашем запросе указан тип содержимого «application / json» на стороне клиента. Проверьте этот ТАК вопрос .

0 голосов
/ 26 июня 2011

Я столкнулся с той же проблемой. Иногда POST-ing JSON работает, но не всегда. Это ненадежно, и причины его провала могут быть загадочными. Я закончил, обнаружив, что POST было больше работы, чем он стоит, и что вы можете сделать то же самое с GET. Если у вас не совсем есть для разработки службы с помощью POST, у меня есть рабочий пример того, как выполнить то, что вы пытаетесь сделать с помощью POST с помощью GET, здесь:

http://winsockwebsocket.codeplex.com/

(Это часть внешне несвязанного проекта, но просто перейдите в папку Northwind.Web, чтобы увидеть полный рабочий пример отправки / получения JSON из jQuery в WCF.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...