【发布时间】:2019-01-04 10:47:40
【问题描述】:
我通过 Microsoft.AspNetCore.OData 包开始使用 OData。成功案例正在运行,但我注意到当 IQueryable<T> 成功返回但无法执行时,我没有收到一个像样的错误消息。相反,我得到了一个截断的结果:
我的控制器没有什么特别之处:
public class DocumentsController : ODataController
{
Db.Context Context { get; }
public DocumentsController(Db.Context context)
{
Context = context;
}
[EnableQuery]
public ActionResult<IQueryable<Document>> Get()
{
return Context.Documents;
}
}
问题不是 OData 特定的:返回 IQueryable<Document> 的普通 ControllerBase 派生控制器的行为方式相同(除了截断的结果仅为 [)。但是,OData 的上下文可能会排除一些可能的解决方案。
我明白为什么会这样:发送序列化结果已经开始;无法及时返回以取消发送并发送错误响应。
我也明白,在一般情况下,阻止不是一个真正的选择:当发送许多项目时,可能会发送除最后一个之外的所有项目而没有任何问题,并且可能会在最后一个项目上引发一些异常,所以在一般情况下防止它需要缓冲完整的结果。
但是,至少在IQueryable<T> 返回其第一个结果之前,应该可以处理引发异常的情况。这将涵盖最严重的错误,其中良好的异常消息对调试非常有帮助:数据库脱机、数据库架构与预期不符等。
我该怎么做?
【问题讨论】:
标签: .net asp.net-core odata asp.net-core-webapi iqueryable