Dec*_*ook 6 c# entity-framework json.net asp.net-web-api2
我有一个webapi,它返回一个包含一些对象集合的对象,这些对象也包含一组对象.这些对象中的每一个都有一个bool,表示对象是否已"发布".请参阅下面的类以获取一般概念.
public class A {
public int ID { get; set; }
public List<B> b { get; set;}
}
public class B {
public List<C> c { get; set; }
public List<D> d { get; set; }
public bool published { get; set; }
}
public class C {
public string Title { get; set; }
public bool published { get; set; }
}
public class D {
public string Title { get; set; }
public bool published { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我序列化任何这些对象时,如果用户不满足要求,IE不在特定角色,则不包括未发布的子对象,最好的方法是什么.我可以以某种方式向我的模型添加数据属性吗?我已经看过使用自定义 IContractResolver但我不确定它是处理嵌套对象的最佳方法.我应该在序列化阶段处理这个问题,还是应该在从数据库中获取对象后从子代中删除未发布的对象.
正如评论(正确地)指出的那样,我的处理方式略有错误。
我通过让两个数据库请求基本看起来像这样解决了我的问题。
A a = null;
if(User.IsInRole("Role")){
a = db.A.Find(Id);
} else {
a = (from a in db.A
join b in db.B on a.ID equals b.ID
join c in db.C on b.ID equals c.ID
join d in db.D on b.ID equals d.ID
where a.ID == id && b.Published && c.Published && d.Published
select a);
}
if(a == null)
return NotFound();
return Ok(a);
Run Code Online (Sandbox Code Playgroud)
我试图避免这样的代码,但我不确定是否有更好的方法来做到这一点。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |