WCF Web API Preview 5 で、奇妙な動作に対処しています。シナリオは次のとおりです。
これは私のモデルです:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
}
これは API です:
[ServiceContract]
public class PersonApi {
[WebGet(UriTemplate = "person?id={ID}&name={Name}&surname={Surname}&age={Age}")]
public Person Get(Person person) {
return person;
}
}
次のコードで API を登録しました。
RouteTable.Routes.MapServiceRoute<ADummy.PersonApi>("Dummy");
次の URL でサービスにアクセスしようとすると、次のエラーが発生します。
localhost:36973/Dummy/person?id=1&name=Tugberk&surname=Ugurlu&age=24
サービス操作 'Get' は、タイプ 'Person' の入力パラメーター 'person' の値を受け取ることはありません。要求 HttpOperationHandler に、'Person' に割り当て可能なタイプの出力パラメーターがあることを確認してください。
しかし、以下のように API ロジックを変更すると機能します。
[ServiceContract]
public class PersonApi {
[WebGet(UriTemplate = "person?id={ID}&name={Name}&surname={Surname}&age={Age}")]
public Person Get(int ID, string Name, string Surname, int Age) {
var p = new Person {
ID = ID,
Name = Name,
Surname = Surname,
Age = Age
};
return p;
}
}
WCF Web API では、ASP.NET MVC のように機能していないと思います。
WCF Web APIでオブジェクトにモデルをバインドする方法は何ですか?
アップデート
別の方法を追加しました:
[WebInvoke(UriTemplate= "put", Method="POST")]
public Person Put(Person person) {
return person;
}
次の詳細でこのメソッドを呼び出すと:
方法: ポスト
URL: http://localhost:36973/Dummy/put
Accept: / Content-Type:text/xml
コンテンツの長さ:189
体:
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ID>1</ID> <Name>Tugberk</Name> <Surname>Ugurlu</Surname> <Age>25</Age> </Person>
私は必要なものを手に入れました。では、カスタム オブジェクトへのクエリ文字列のバインドは許可されていないのでしょうか?