我正在使用 Asp.Net Web Api。我希望能够根据连接的客户端访问权限过滤掉响应对象上的某些字段。
例子:
class Foo
{
[AccessFilter("Uberlord")]
string Wibble { get; set; }
string Wobble { get; set; }
}
返回数据时,Wibble
仅当当前用户上下文可以满足“Uberlord”的值时,才应返回该字段。
我正在探索三种途径,但我没有找到可行的解决方案:
- 自定义 WebApi MediaTypeFormatter。
- 自定义 json.net IContractResolver。
- 用于操作响应对象的控制器的某种 AOP 包装器
我的问题是:
- 自定义格式化程序感觉不是正确的地方,但可能是唯一的选择。
- 自定义 json 序列化程序无法访问当前上下文,所以我必须解决这个问题。
- 使用前两个选项,您需要针对每种响应格式、json、xml、某些自定义格式等进行特定的实现。这意味着如果支持另一种响应类型,则需要自定义格式化程序/序列化程序来防止敏感数据泄漏。
- AOP 控制器包装器需要大量反射。
另一个好处是使用相同的机制从入站请求对象的字段中删除值。
我错过了一个明显的钩子吗?这是否已通过其他方式解决?