Передавання параметра string до служби RESTful під час дії POST

У мене є служба RESTful з наступним методом:

[WebInvoke] 
string GetDataFromStringAsString(string xmlString); 

Мій клієнт викликає метод, як показано нижче:

var client = new RestClient(); 
client.BaseUrl = serviceBaseUrl; 
var request = new RestRequest(method){RequestFormat = DataFormat.Xml}; 
request.Resource = resourceUrl; 
request.AddParameter("text/xml", requestBody, 
ParameterType.RequestBody); 
var response = client.Execute(request); 

Давайте візьмемо рядок для публікації як "Hello World".

Тепер рядок, який я розміщую в вищевказаному методі, дає мені 400 Bad запит Для того, щоб отримати роботу, мені довелося перегорнути вказану вище рядок в елемент, як показано нижче:

Hello World 

Тепер, коли я розміщую вище рядку, я отримую відповідь про успіх звідси сервер

Чому я повинен вручну загорнути рядок, щоб він працював. Є існує спосіб, який я можу досягти, щоб додати рядок, не виконуючи його вище вручну.

0

1 Відповіді

Єдиний спосіб, який я знаю, полягає в тому, щоб використовувати потік як ваш вхідний параметр. наприклад,

[WebInvoke] 
string GetDataFromStringAsString(stream xmlString);

Проблема з .Net 4 WCF REST полягає в тому, що WCF принципово знає, як передавати два типи інформації: xml або потік байтів. Особисто я би використовував WCF Web API замість стандартної бібліотеки WCF REST, тому що ви збираєтеся вдаватися до більшої кількості таких випусків.

0
додано
@Rajesh Якщо ви використовуєте потік, клієнт може відправити все, що завгодно. Ваша служба повинна прочитати Тип контенту, вказаний клієнтом, і правильно інтерпретувати потік байтів.
додано Автор Darrel Miller, джерело
@Rajesh Клієнт надсилає купу байтів. Який тип клієнт використовує для того, щоб зберегти цю групу байтів, не має значення. Тип контенту, який використовується, - це угода між клієнтом і сервером про те, як інтерпретувати значення цих байтів. Типи .Net не мають відношення до служби REST.
додано Автор Darrel Miller, джерело
Привіт Darrel, так, я знаю, що інша альтернатива - це також використання потоку або XElement. але вважаю, що я - клієнт, і я не знаю, чи метод у службі використовує рядок типу або потік або XElement. Як я можу йти в тих сценаріях?
додано Автор Rajesh, джерело
Вітаю Darrel, я - клієнт, якому потрібно зателефонувати за послугою. Як дізнатися, чи є його потік чи рядок або XElement?
додано Автор Rajesh, джерело
Вітаю Darrel, чи означає це, що краще відправляти ці значення як байти завжди, коли дзвонив до сервісу.
додано Автор Rajesh, джерело