これを行う方法を見つける。私はthis guideの助けによってシリアライザをカスタマイズすることによってそれをしました。最終的なコード:
using Microsoft.Data.Edm;
using Microsoft.Data.OData;
using System.Web.Http.OData.Formatter.Serialization;
namespace MyProj
{
public class CustomODataEntityTypeSerializer : ODataEntityTypeSerializer
{
public CustomODataEntityTypeSerializer(ODataSerializerProvider serializerProvider) : base(serializerProvider)
{
}
public override void WriteObjectInline(object graph, IEdmTypeReference expectedType, ODataWriter writer, ODataSerializerContext writeContext)
{
//http://odata.github.io/WebApi/#06-03-costomize-odata-formatter
if (graph is CompanyDto)
{
var company = (CompanyDto)graph;
company.FirstName = Encrypt(company.FirstName);
company.LastName = Encrypt(company.LastName);
}
base.WriteObjectInline(graph, expectedType, writer, writeContext);
}
}
}
そして、このクラス:
using Microsoft.Data.Edm;
using System.Web.Http.OData.Formatter.Serialization;
namespace MyProj
{
public class CustomDefaultODataSerializerProvider : DefaultODataSerializerProvider
{
CustomODataEntityTypeSerializer _customODataEntityTypeSerializer;
public CustomDefaultODataSerializerProvider()
{
_customODataEntityTypeSerializer = new CustomODataEntityTypeSerializer(this);
}
public override ODataEdmTypeSerializer GetEdmTypeSerializer(IEdmTypeReference edmType)
{
if (edmType.IsEntity())
{
return _customODataEntityTypeSerializer;
}
return base.GetEdmTypeSerializer(edmType);
}
}
}
そして、次のようにそれを初期化:
var odataFormatters = ODataMediaTypeFormatters.Create(new CustomDefaultODataSerializerProvider(), new DefaultODataDeserializerProvider());
config.Formatters.InsertRange(0, odataFormatters);
ちょうどHTTPSを使用して、すべてのデータと採石場の文字列が暗号化されます。独自の暗号化を行う場合、どのように鍵を保護しますか(秘密を保持し、クライアントとサーバの間で共有します)? – zaph
HTTPSはオプションではありません。クライアントはデータを見ることができません。クライアント上のプロセスはデータを解読します。私は、キーがクライアントの実行ファイルにあり、見つけられるということに同意します。しかし、アプリケーションは、ハックスキルを持つと思われる非常に少数の場所で使用されます。 –
シリアライザを使用するのではなく、データの「暗号化」バージョンをODataプロパティに格納する方法はありますか? –