0

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>

私は必要なものを手に入れました。では、カスタム オブジェクトへのクエリ文字列のバインドは許可されていないのでしょうか?

4

2 に答える 2

0

あなたの経験に基づくと、設計上の動作は、Get()アクションがUriTemplateで定義されたパラメーターのみをバインドすることであるように見えます。目的とセキュリティの観点から、これは正しい動作です。

于 2011-11-23T13:06:50.947 に答える
0

ASP.NET Web APIの最新バージョン(ASP.NET MVC 4 Beta でリリース) では、モデル バインディングがサポートされています。

モデル バインディングと検証: モデル バインダーは、HTTP 要求のさまざまな部分からデータを抽出し、それらのメッセージ部分を Web API アクションで使用できる .NET オブジェクトに変換する簡単な方法を提供します。

以前のバージョンの ASP.NET Web API では、必要な機能を HttpOperationHandler で実装し、OnHandle メソッドでモデルを返すことができました。Validating model properties WCF Web APi の質問と回答をインスピレーションとして使用できるかもしれません。

于 2012-02-21T12:51:40.163 に答える