2017-11-20 13 views
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' 
    } 
} 

答えて

1

問題があなたの日付時刻形式です。日付の時刻形式を設定する必要があります。このようなもの:

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings 
    { 
     DateFormatHandling = DateFormatHandling.MicrosoftDateFormat 
    }; 

もっと読むことができます。

+0

こんにちは、ありがとうございます。私はそのコードを追加すると、さらにそれが得られます。 Webメソッドが今呼び出されましたが、渡されたオブジェクトはnullです。あなたが考えることができる明白な理由は何ですか? {"コード": "0001"、 "ApptDateTo": "2017-11-22T11:24:17.2216251 + 00:00"、 "ApptDateFrom": "2017-11-21T11:24: 17.2196202 + 00:00 "、"タイプ ":67、"ステータス ":" "} –

+0

は完全に別のものです。それは何でもできる。私は質問を閉じて別の質問をし、サーバー側のコードを提供することをお勧めします。私はあなたのコードに間違っていると思う。 – David

+0

うまくいくでしょう、もはや「悪い要求」ではないと答えています。私は、文字列でテストメソッドを実行し、jSonで異なるパラメータに名前を付けた場合と同じように、その名前付けの問題を考えると、nullです。名前が一致すると、文字列は正常に渡されます –

関連する問題