2

AppHost ではJsConfig.ExcludeTypeInfo=true;、型が応答にシリアル化されないように設定しています (一部の Web サービス応答で匿名型を使用しています)。

認証はすべて正常に機能/api/auth/credentialsしますが、セキュリティで保護された Web サービスへの要求がある場合、GetSession()拡張メソッドはインターフェイス (IAuthSession) に逆シリアル化しようとしていて、設定のために JSON に型情報がありませIAuthSessionん。そのため、シリアライザはどの具象型を使用すればよいかわかりません。 </p> ICacheClientJsConfig.ExcludeTypeInfo

4

1 に答える 1

2

を使用しCustomAuthUserSession、持っている場合

JsConfig.Init(new Config {
    ExcludeTypeInfo = true
});

解決策は、それを必要とするタイプに対して有効にすることです。この場合:

JsConfig<CustomAuthUserSession>.IncludeTypeInfo = true;

これは、ServiceStack を使用して独自のカスタム UserSession を永続化できるためです。その__type情報をペイロードとともに永続化して、どの具象型に脱水するかを知る必要があります。

任意応答のサポート

DTO が任意の型の保持をサポートできる場合、基本的にはオブジェクト、インターフェイス、または抽象プロパティを使用する場合 (つまり、クラス定義から型を推測できない場合) にのみこれを行う必要があるため、これはかなりまれです。これが ServiceStack に存在する他の唯一の場所はMessage<T>、任意の本体を永続化できる MQ タイプです。

匿名型の代わりに緩い型のデータ構造を使用する

デフォルトでは、ServiceStack は必要な場合にのみ追加された__type情報を追加しますが、理想的には、サービス レスポンスで匿名型を使用しないようにする必要があります。これにより、デフォルトの構成から逸脱し、ServiceStack が推奨する「成功の落とし穴」の開発が必要になります。

Dictionary匿名型として、または構造化されていないデータのような緩い型のデータ構造を使用すると、List基本的に DTO が逆シリアル化できなくなり、サービスが最終的に何を返すかをクライアントが認識できなくなります。 XSD/WSDL/SOAP など、静的に推論可能。

于 2013-09-17T06:28:23.827 に答える