私は同じ問題を抱えています。渡すオブジェクトを追加しようとすると、「不正な要求」になります。私は見つけた様々なサイトに基づいていろいろなことを試みましたが、何も得られませんでした。その後、フォーマットをXmlからJsonに変更しました。 XMLを渡すことで不具合が発生しているはずです。 2台目のPCをセットアップし、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サービスも新しくなっています。私はよりよい答えに向けるために私の発見を追加すると思っていた。
(--EDIT--) 私はいくつかのより多くの掘りやったとthis tidbit を見つけたので、私はそう
[ServiceContract]
[XmlSerializerFormat]
public interface IMyRestService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "manualselect", ResponseFormat = WebMessageFormat.Xml)]
void PostManualSelect(ManualUpdateRequest S);
}
し、その後、これは最終的に働いていたし、私のようなのServiceContractインターフェイスに[XmlSerializerFormat]属性を追加しました私はいくつかのより多くのXMLに遭遇した
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--)私のサービス内のオブジェクトを得ました私にこの延長をさせるような奇妙さを連想させる(借りるのは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>();
}
を探し始める。この答えが長くなっているが、私はそれが誰かにいくつかの助けであると思います。
おかげで - あなたの提案を試してみました - まだ「不正な要求」の応答を得ることを恐れてイムイム。うまくいけばそれは他の誰かを助けることができる – steve
これのためにありがとう、私は仕事の時間を節約した。私の問題は、[XmlSerializerFormat] – paulio