POST eylemi sırasında bir RESTful hizmetine bir dize paramını geçirme

Aşağıdaki yöntemle RESTful hizmet yaşıyorum:

[WebInvoke] 
string GetDataFromStringAsString(string xmlString); 

İstemciye yöntemim aşağıdaki gibidir:

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); 

"Merhaba Dünya" olarak yayınlamak için bir ipucu alalım.

Şimdi yukarıdaki yönteme gönderdiğim dize bana 400 Bad veriyor istek. Çalışmasını sağlamak için yukarıdaki dizgiyi sarmak zorunda kaldım. aşağıda gösterildiği gibi bir öğe:

Hello World 

Şimdi yukarıdaki dizeyi yüklediğimde, başarı yanıtı alıyorum. sunucu.

Neden bunu yapmak için dizeyi elle sarmak zorundayım. mı Bunu yapmaksızın bir dize göndermek için yapabileceğim bir yol var manuel olarak.

0

1 cevap

Bildiğim tek diğer yol, giriş parametreniz olarak akışı kullanmaktır. Örneğin.

[WebInvoke] 
string GetDataFromStringAsString(stream xmlString);

.Net 4 WCF REST ile ilgili problem, temel olarak WCF'nin sadece xml veya bir bayt akışı olmak üzere iki tür bilginin nasıl geçeceğini bilmesidir. Kişisel olarak, WCF Web API'sini standart WCF REST kütüphanesi yerine kullanacağım, çünkü bu tür sorunlardan daha fazlasına giriyorsunuz.

0
katma
@Rajesh Eğer akışı kullanırsanız, müşteri istediğini gönderebilir. İstemci tarafından belirtilen İçerik türünü okumak ve bayt akışını uygun şekilde yorumlamak hizmetinize kalmış.
katma yazar Darrel Miller, kaynak
@Rajesh İstemci bir grup bayt gönderiyor. İstemcinin bayt demetini tutmak için kullandığı tür, bir fark yaratmaz. Kullanılan içerik türü, istemci ve sunucu arasında bu baytların anlamının nasıl yorumlanacağı konusunda bir anlaşmadır. Net türleri bir REST hizmetiyle ilgisizdir.
katma yazar Darrel Miller, kaynak
Merhaba Darrel, evet diğer alternatifin de bir stream veya XElement kullanması olduğunu biliyorum. ancak istemciyim ve hizmetteki yöntemin tür dizesi veya akışını veya XElement'i kullanıp kullanmadığını bilmiyorum. Bu senaryolarda nasıl geçerim?
katma yazar Rajesh, kaynak
Merhaba Darrel, hizmeti çağırmak isteyen müşteriyim. Bir akışının veya dizesinin mi yoksa XElement mi olduğunu nasıl anlarım?
katma yazar Rajesh, kaynak
Merhaba Darrel, Bu, servise her zaman çağrı yaparken, değerleri bayt olarak göndermenin daha iyi olduğu anlamına mı geliyor?
katma yazar Rajesh, kaynak