ASP.NET Web APIプロジェクトでは、すべての応答のエンティティIDすべてを暗号化し、すべての要求の暗号化された値を復号化する必要があります。ASP.NET Web APIの単純なプロパティのカスタム型コンバータ
(注:私は、データを暗号化/復号化する方法を知っている、それは私の質問ではありません。)
私は唯一の私は暗号化/復号化する必要があるプロパティを飾る場合、それは素敵なことだと思いますリクエスト/レスポンス/リクエスト。
これは、私はそれが仕事をしたい方法です:
public class Person
{
[EncryptDecrypt]
public int PersonID {get; set;}
public string Name {get; set;}
public IEnumerable<Order> Orders {get; set;}
}
public class Order
{
[EncryptDecrypt]
public long OrderID {get; set;}
public string Title {get; set;}
public float Price {get; set;}
}
は、その後のWeb APIメソッドで:
// GET: api/persons/xhj$j78dPs (xhj$j78dPs is an encrypted PersonID)
public Person Get([EncryptDecrypt]int personId)
{
// Now, I expect personId to be a normal ID, like: 187356
Person person = _repository.GetPerson(personId);
return person;
}
上記のWeb APIの欲求応答は次のとおりです。
{
"personId": "xhj$j78dPs",
"name": "Joe Williams",
"orders": [
{
"orderId": "a#jd75mlzed0ihd",
"title": "Buying a new item",
"price": 19.99
}
]
}
これは別の例ですが、今度はPUT動詞のWeb API:
/* PUT Request body: */
{
"orderId": "a#jd75mlzed0ihd",
"title": "Buying a new item - edited",
"price": 13.00
}
関連のWeb APIメソッド:
// PUT: api/persons/xhj$j78dPs/orders/ (xhj$j78dPs is an encrypted PersonID)
public void Put([EncryptDecrypt]int personId, Order editedOrder)
{
// I expect personId to be a normal ID, like: 187356
// I expect editedOrder.OrderID to be a normal ID, like: 10000089765
_repository.UpdateOrder(personId, editedOrder);
}
どのように私は[EncryptDecrypt]
属性を開発することができますか?
[EncryptDecrypt]
は実際にはJsonConverter attributeである必要がありますか?または、カスタムMedia Formatterまたはモデルバインダーまたはバリュープロバイダーまたはパラメータバインダーを開発する必要がありますか?私は混乱しています。
この作品は次のようなものですか? http://www.codemag.com/article/0307041 – Namrehs
処理方法のアイデアについては、[オブジェクトのシリアライズ時に選択プロパティを暗号化するにはどうすればいいですか?](http://stackoverflow.com/q/29196809/10263)を参照してください。そのシリアル化の終わり。あなたは文字列ではなく数値プロパティでこれを動作させたいので、少し調整しなければなりません。 Web APIのパラメータ処理のために、カスタムWeb API「IValueProvider」と「ValueProviderFactory」を作成したいと考えています。 http://www.aspを見てください。net/web-api/overview/formats-and-model-binding /パラメータバインディング-aspnet-web-api –