C # — лучший способ CURL для WCF

Я могу публиковать сообщения в веб-сервисе, написанном на C # из PHP, с помощью CURL-запроса, но не могу правильно выполнить запрос. Независимо от того, что я делаю, единственный способ, которым я могу получить пост, — это если я json_encode заголовки данных формы. Итак, мой PHP-код в итоге выглядит так:

$ user = array ('id' => 5, 'first_name' => 'First', 'last_name' => 'Last');

$ uch = curl_init ();
curl_setopt ($ uch, CURLOPT_URL, "http: // localhost: 50115 / Service1.svc / postUser");
curl_setopt ($ uch, CURLOPT_POST, 1);
curl_setopt ($ uch, CURLOPT_POSTFIELDS, json_encode ("user =". json_encode ($ user)));
curl_setopt ($ uch, CURLOPT_HTTPHEADER, массив (
'Content-Type: application / json'
));
curl_setopt ($ uch, CURLOPT_RETURNTRANSFER, true);
$ response = curl_exec ($ uch);

Когда я установил строку:

curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode("user=" . json_encode($user)));

чтобы:

curl_setopt($uch, CURLOPT_POSTFIELDS, array("user" => json_encode($user)));
--OR--
curl_setopt($uch, CURLOPT_POSTFIELDS,
http_build_query(array("user" => json_encode($user))));
--OR--
curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode($user));

в PHP нет ошибок, служба C # не возвращает ошибку (у меня есть настройка для возврата исключений, заданных в конфигурации), и точка останова функции никогда не срабатывает.

На стороне C # мой интерфейс и сервис настроены так:

//Интерфейс
[OperationContract]
[WebInvoke (метод = "POST",
BodyStyle = WebMessageBodyStyle.Bare, // Любое другое значение, точка останова
// не сработает
RequestFormat = WebMessageFormat.Json,
UriTemplate = "postUser")]
void PostUser (строка user);

//Обслуживание
public void PostUser (пользователь строки)
{
var request = user;
int i = 5; // Отладка установлена ​​здесь
}

Когда наступает переломный момент, я могу видеть, что user имеет значение:

user={"id":5,"first_name":"First","last_name":"Last"}

То, что я хотел бы иметь для значения user просто быть:

{"id":5,"first_name":"First","last_name":"Last"}

Можно ли получить мой ответ, как это? Если это так, что мне нужно изменить, чтобы достичь этого?

3

Решение

Попробовав несколько комбинаций в PHP и C #, я наконец-то заставил его работать. В PHP CURLOPT_POSTFIELDS необходимо установить с помощью:

curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode(array("user" => json_encode($user))));

Затем в C # мне нужно было изменить BodyStyle=WebMessageBodyStyle.Bare в BodyStyle=WebMessageBodyStyle.Wrapped;

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]