我正在寻找一种优雅的方式来不允许在 BreezeJS中扩展特定的实体类型。我们有一个(有点)我们要公开的公共 Web 服务,并且有一些表我们不希望对该服务的某些消费者可见。虽然我们只能为那些特定的表公开 Web API 方法,但服务的使用者仍然可以通过从相关表扩展来访问这些表。
注意:我已经发布了这个问题的答案,给出了解决方法。但是,如果有人知道一种更优雅的给这只猫剥皮的方法,我很感兴趣。
我正在寻找一种优雅的方式来不允许在 BreezeJS中扩展特定的实体类型。我们有一个(有点)我们要公开的公共 Web 服务,并且有一些表我们不希望对该服务的某些消费者可见。虽然我们只能为那些特定的表公开 Web API 方法,但服务的使用者仍然可以通过从相关表扩展来访问这些表。
注意:我已经发布了这个问题的答案,给出了解决方法。但是,如果有人知道一种更优雅的给这只猫剥皮的方法,我很感兴趣。
在请求将此功能正式添加到 Breeze 的 UserVoice 页面上,Ward Bell 建议了一个不错的解决方法:
同时,在您的控制器中,您可以检查请求中的查询字符串是否存在 $select 和 $expand,如果看到则抛出异常。
我猜这看起来像这样:
[HttpGet]
public IQueryable<Widget> Widgets() {
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["$expand"]))
{
throw new Exception("Ah ah ah, you didn't say the magic word!");
}
return _contextProvider.Context.Widgets;
}
...阻止所有扩展,或更具体地阻止功能扩展本身。这不是太破旧,但不是很“优雅”。
(是的,这是侏罗纪公园的参考。)