Finden Sie einen Weg, es zu tun. Ich habe es getan, indem ich Serializer mit Hilfe von this guide angepasst habe. Schlusscode:
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);
}
}
}
Und diese Klasse:
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);
}
}
}
Und es wie folgt initialisiert:
var odataFormatters = ODataMediaTypeFormatters.Create(new CustomDefaultODataSerializerProvider(), new DefaultODataDeserializerProvider());
config.Formatters.InsertRange(0, odataFormatters);
Nur HTTPS verwenden, werden alle Daten und der Steinbruch Zeichenfolge verschlüsselt. Wenn Sie Ihre eigene Verschlüsselung durchführen, wie schützen Sie den Schlüssel (halten Sie ihn geheim und teilen Sie ihn zwischen dem Klienten und dem Bediener)? – zaph
HTTPS ist hier keine Option. Der Client darf keine Daten sehen können. Ein Prozess auf dem Client entschlüsselt Daten. Ich stimme zu, dass der Schlüssel in den ausführbaren Dateien des Clients enthalten ist und gefunden werden kann. Aber Anwendung wird an sehr wenigen Orten verwendet, die Hackerfähigkeiten haben sollen. –
Wie wäre es mit der Speicherung der "verschlüsselten" Version Ihrer Daten in der OData-Eigenschaft, anstatt mit Serialisierern herumzuspielen? –