1

ServiceStackのwikiの例に基づいて、次のようなURIがある場合:

www.servicestack.net/ServiceStack.Hello/servicestack/hello?Name=World

リクエストのDTOは次のようになります。

[Route("/hello")]
public class Hello
{
    public string Name { get; set; }
}

ただし、URIが次のような場合:

www.servicestack.net/ServiceStack.Hello/servicestack/hello?n=World

上記と同じDTOをどのように使用しますが、Nameを「n」にマップしますか?これを行うためにDTOプロパティを装飾できる属性はありますか?

次のように、DataContract属性とDataMember属性を使用してみました。

[DataContract]
[Route("/hello")]
public class Hello
{
    [DataMember(Name = "n")]
    public string Name { get; set; }
}

これは正常に機能しますが、プロパティが多数ある場合は、すべてのプロパティを[DataMember]属性で装飾しない限り、機能しなくなります。

DataContractとDataMemberを使用せずに、プロパティとは異なるパラメータのカスタム名を提供する方法はありますか?たぶん、ServiceStackによって提供されるカスタム属性なので、異なる方法でマッピングする必要があるものだけが属性を持ち、残りはそのままになりますか?

4

1 に答える 1

2

.NET DataContract SerializersがDTOで別の名前を使用するための標準的な方法は、[DataMember]属性を使用することです。これを行いたくない場合は、プロパティ名をQueryString変数と同じ名前にすることができます(大文字と小文字は区別されません)。

それ以外は、独自のカスタムリクエストバインダーを提供するか、サービス内から直接QueryStringにアクセスするか、次のコマンドを使用してフィルター処理できます。

var name = base.Request.QueryString["n"];

多くの変数に対してこれを頻繁に行う場合は、QueryStringからの抽出と、リクエストDTOのフィルター属性への入力をラップできます。

于 2012-12-24T07:48:44.607 に答える