innererror名称/值对的值必须是一个对象。该对象的内容是服务定义的。通常,此对象包含有助于调试服务的信息。 innererror名称/值对应该只在开发环境中使用,以防止信息泄露方面的潜在安全问题。
规范是正确的,在asp.net中,innererror
属性提供了有用的信息,例如stacktrace,但我真的不想与我的API客户端共享此信息
到目前为止,我还没有找到从响应中删除此属性的方法,是否可能?
答案 0 :(得分:3)
是的,这是可能的,但非常麻烦。
你需要做四件事:
首先,您应该从默认实现派生自己的OData错误序列化程序。与default ODataErrorSerializer的区别在于覆盖包含以下代码的方法:
bool includeDebugInformation = oDataError.InnerError != null;
将其更改为
bool includeDebugInformation = oDataError.InnerError == null;
或者只是在重写的实现中将值设置为false
。我们假设您自己的OData错误序列化程序称为MyODataErrorSerializer
。
然后,您需要从默认的OData序列化程序提供程序派生自己的OData序列化程序提供程序。与DefaultODataSerializerProvider的区别在于更改以下代码:
private static readonly ODataErrorSerializer _errorSerializer = new ODataErrorSerializer();
到您自己的错误序列化程序:
private static readonly ODataErrorSerializer _errorSerializer = new MyODataErrorSerializer();
假设您自己的序列化程序提供程序名为MyODataSerializerProvider
。
之后,对ODataMediaTypeFormatters
做类似的事情。从[{3}}中导出MyODataMediaTypeFormatters
,MyODataSerializerProvider
使用DefaultODataSerializerProvider
代替config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create());
。
最后,将以下代码添加到Web API OData实现中:
{{1}}