我一直在努力解決同樣的問題。一旦嘗試添加要傳遞的對象,它就會變成「錯誤的請求」。我根據我發現的各種網站嘗試了各種各樣的東西,但一無所獲。然後我將格式從Xml更改爲Json,並開始工作。必須通過XML傳遞一些小故障。可能需要安裝第二臺電腦,並試着用wireshark或fiddler之類的東西來嗅探實際的http。 (或者,也許我就堅持以JSON)
下面是我的實驗WCF接口功能
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "manualselect", ResponseFormat = WebMessageFormat.Json)]
void PostManualSelect(ManualUpdateRequest S);
然後我的測試RestSharp客戶
var client = new RestClient();
client.BaseUrl = "http://127.0.0.1:8000";
/* Initialization of ManualUpdateRequest instance "DR" here */
var request = new RestRequest(Method.POST);
request.Resource = "manualselect";
request.RequestFormat = DataFormat.Json;
request.AddBody(DR);
RestResponse response = client.Execute(request);
也許有人可以闡明一些輕就此事。我也是REST服務的新手。我想我會添加我的研究結果來指導一個更好的答案。
(- 編輯 -) 我沒多一些挖掘和發現this tidbit 所以我加入了[XmlSerializerFormat]屬性的ServiceContract接口,像這樣
[ServiceContract]
[XmlSerializerFormat]
public interface IMyRestService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "manualselect", ResponseFormat = WebMessageFormat.Xml)]
void PostManualSelect(ManualUpdateRequest S);
}
,然後這最後的工作和我得到了我服務的對象
var client = new RestClient();
client.BaseUrl = "http://127.0.0.1:8000";
/* Initialization of ManualUpdateRequest instance "DR" here */
var request = new RestRequest(Method.POST);
request.Resource = "manualselect";
request.RequestFormat = DataFormat.Xml;
request.AddBody(DR);
RestResponse response = client.Execute(request);
(--edit 2--)我遇到了一些更多的XML序列化奇怪,導致我做這個擴展(借用here)。如果你仍然有麻煩,可以幫忙。還有一個回答here,這意味着你需要使用公共屬性正確序列化,我還沒有嘗試過。
public static class RestSharpExtensions
{
public static T GetXmlObject<T>(this IRestResponse response)
{
if (string.IsNullOrEmpty(response.Content))
{
return default(T);
}
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlReaderSettings settings = new XmlReaderSettings();
// No settings need modifying here
using (StringReader textReader = new StringReader(response.Content))
{
using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
{
return (T)serializer.Deserialize(xmlReader);
}
}
}
public static void UseDotNetXml(this IRestRequest request)
{
request.RequestFormat = DataFormat.Xml;
request.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer();
}
}
所以我RestSharp電話開始尋找更多像這樣的
public SimpleSignUpdateDataSet GetSimpleDataset()
{
var client = new RestClient(SerivceURL);
var request = new RestRequest("simpledataset", Method.GET);
request.UseDotNetXml();
var resp = client.Execute(request);
return resp.GetXmlObject<SimpleSignUpdateDataSet>();
}
這個答案越來越長,但我希望它是有一定的幫助的人。
來源
2012-04-12 13:02:57
CFD
感謝您抽空回覆時間 - 想你的建議 - 我怕IM仍然得到「錯誤的請求」的響應。希望它可以幫助其他人 – steve 2012-04-21 09:48:24
謝謝你,你爲我節省了幾個小時的工作。我的問題是通過添加[XmlSerializerFormat] – paulio 2012-08-20 10:59:34