我有一个OData控制器,希望对其输出的字符串字段进行编码。OData输出结果以明文形式发送回客户端,但是我想在将其发送到客户端之前对其进行加密。
似乎最好的方法是使用自定义的OData序列化程序或Feed序列化程序来实现我的目标。但是我不确定要定制哪个类。重写某些方法还是实现我自己的序列化类的自定义版本是否更好。
任何帮助表示赞赏。
找到一种方法来做到这一点。我通过在本指南的帮助下自定义序列化程序来完成此操作。最终代码:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句