我一直在努力解决同样的问题。一旦尝试添加要传递的对象,它就会变成“错误的请求”。我根据我发现的各种网站尝试了各种各样的东西,但一无所获。然后我将格式从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