暗号化された JSON データを受け入れるサービスがありますが、外部サービスを使用してその JSON データを復号化し、暗号化されていないデータを渡してシリアライズし、適切なサービス ハンドラで処理できるようにしたいと考えています。
暗号化されたデータの dto は次のようになります。
[Route("/encrypted", "POST")]
public Encrypted
{
public string data { get; set; } // the value stored here is encrypted
}
復号化されたデータのサンプル dto を次に示します。
[Route("/book", "POST")]
public Book
{
public string author { get; set; }
}
復号化サービスと書籍サービスは次のようになります。
public class DecryptionService : Service
{
public string Post(Encrypted request)
{
// decrypt request.data and return the decrypted json string
}
}
public class BookService : Service
{
public object Post(Book request)
{
// return a list of books based on the author
}
}
ServiceStack AppHostで、リクエスト入力ストリームから未加工の JSON データを読み取り、それを Encrypted オブジェクトに逆シリアル化し、EncryptedService クラスを呼び出してデータを復号化し、暗号化されていない JSON 文字列を返します。
// this bit is done in a request filter method
Encrypted encDto = JsonSerializer.DeserializeFromString<Encrypted>(reqInputStreamContent);
string jsonResult = new EncryptedService().Post(encDto);
リクエストが通常のリソースルートに届くようにします。/bookまたは/personなど、JSON リクエストは次のようになります。
{
"data":"some encrypted data"
}
次に、このデータは復号化され、適切な動詞ハンドラー ( Book.PostまたはPerson.Postなど) に渡されます。トリッキーな部分は、復号化されるまで、プレーンな json 要求がどのように見えるかわかりません。復号化した後、どのサービス ハンドラがリクエストを処理する必要があるかを判断する必要があります。
暗号化されていない json 文字列を適切なサービス ハンドラに渡すにはどうすればよいですか? 復号化されたjson文字列をオブジェクトにデシリアライズしてから、正しい登録済みメッセージハンドラーがそれを取得して処理することを期待してオブジェクトを公開しようとしましたが、うまくいきませんでした。