gdo*_*ica 5 .net c# asp.net odata asp.net-web-api
错误响应规范说:
内部错误名称/值对的值必须是一个对象。该对象的内容是服务定义的。通常此对象包含有助于调试服务的信息。内部错误名称/值对应该仅在开发环境中使用,以防止信息泄露的潜在安全问题。
规范是正确的,在 asp.net 中,该innererror属性提供了有用的信息,例如堆栈跟踪,但我真的不想与我的 API 客户端共享此信息
到目前为止,我还没有找到从响应中删除此属性的方法,这是否可能?
是的,这是可能的,但是相当麻烦。
你需要做四件事:
首先,您应该从默认实现派生您自己的 OData 错误序列化程序。与默认 ODataErrorSerializer的区别在于重写包含以下代码的方法:
bool includeDebugInformation = oDataError.InnerError != null;
Run Code Online (Sandbox Code Playgroud)
将其更改为
bool includeDebugInformation = oDataError.InnerError == null;
Run Code Online (Sandbox Code Playgroud)
或者简单地将值设置为false您覆盖的实现中。假设您自己的 OData 错误序列化程序名为MyODataErrorSerializer。
然后,您需要从默认的 OData 序列化程序提供程序派生您自己的 OData 序列化程序提供程序。与DefaultODataSerializerProvider的区别在于更改以下代码:
private static readonly ODataErrorSerializer _errorSerializer = new ODataErrorSerializer();
Run Code Online (Sandbox Code Playgroud)
到你自己的错误序列化器:
private static readonly ODataErrorSerializer _errorSerializer = new MyODataErrorSerializer();
Run Code Online (Sandbox Code Playgroud)
假设您自己的序列化器提供程序称为MyODataSerializerProvider.
之后,做类似的事情ODataMediaTypeFormatters。MyODataMediaTypeFormatters从DefaultODataMediaTypeFormatters派生,它使用MyODataSerializerProvider而不是DefaultODataSerializerProvider.
最后,将以下代码添加到您的 Web API OData 实现中:
config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |