0
HttpClientを使用してXamarin経由でWCF Restサービスを呼び出そうとしています。私は数多くの方法を試しましたが、理想的にカスタムタイプを渡す必要があります。HttpClient経由でRest WCFサービスを呼び出す
HTTPエラー400 - 不正リクエストが発生しています。
私はXamarinの動作を模倣するための基本テストを作成しましたが、それでも同じエラーが発生します。ここでは、コードは次のとおりです。
WCFサービスインターフェイス/メソッド:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetBookedContacts")]
List<Contact> GetBookedContacts(ContactParameter contactParameter);
テスト機能:
public async Task TestWebServiceCallAsync()
{
HttpClient client;
client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
ContactParameter cp = new ContactParameter();
cp.ApptDateFrom = DateTime.Now;
cp.ApptDateTo = DateTime.Now.AddDays(1);
cp.Code = "0001";
cp.Type = Enums.ContactType.Person;
string RestUrl = "http://testws/Rest/data.svc/GetBookedContacts";
var uri = new Uri(string.Format(RestUrl, string.Empty));
var json = JsonConvert.SerializeObject(cp);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(uri, content);
}
我々はNewtonsoft.Jsonライブラリを使用してカスタムタイプを変換しています。
私は、同じ文字列パラメータだけで、同じWebサービス上に別の関数を作成してもうまくいきます。
それはタイプの問題でなければなりませんが、私は、Webサービスで、次のようなタイプがマークされてい:
[DataContract]
public class ContactParameter
{
[DataMember]
public string Code { get; set; }
[DataMember]
public DateTime ApptDateTo { get; set; }
[DataMember]
public DateTime ApptDateFrom { get; set; }
[DataMember]
public Enums.Enums.ContactType Type { get; set; }
[DataMember]
public string Status { get; set; }
}
public class Enums
{
[DataContract]
public enum ContactType
{
[DataMember]
[EnumMember]
Person= 'P',
[DataMember]
[EnumMember]
Other= 'T'
}
}
こんにちは、ありがとうございます。私はそのコードを追加すると、さらにそれが得られます。 Webメソッドが今呼び出されましたが、渡されたオブジェクトはnullです。あなたが考えることができる明白な理由は何ですか? {"コード": "0001"、 "ApptDateTo": "2017-11-22T11:24:17.2216251 + 00:00"、 "ApptDateFrom": "2017-11-21T11:24: 17.2196202 + 00:00 "、"タイプ ":67、"ステータス ":" "} –
は完全に別のものです。それは何でもできる。私は質問を閉じて別の質問をし、サーバー側のコードを提供することをお勧めします。私はあなたのコードに間違っていると思う。 – David
うまくいくでしょう、もはや「悪い要求」ではないと答えています。私は、文字列でテストメソッドを実行し、jSonで異なるパラメータに名前を付けた場合と同じように、その名前付けの問題を考えると、nullです。名前が一致すると、文字列は正常に渡されます –