【发布时间】:2020-10-15 08:13:31
【问题描述】:
我正在尝试向我的 OData 控制器添加一个新方法,此方法的目的是根据给定的过滤器生成一个用户报告文件。该过滤器将应用于系统中的所有用户,并在过滤后生成剩余用户的报告。 该报告是一个 PDF 文件,因此我将其作为 byte[] 返回,客户端必须将其写入磁盘。 这是我的代码:
[HttpGet]
public IHttpActionResult GenerateUsersReport(ODataQueryOptions options)
{
var users = (IQueryable<Incident>)options.ApplyTo(_LINQ.UserQuery);
var usersIDs = users.Select(user => user.ID);
byte[] report = // Generate query according to the user IDs
return new FileResponse(report, "application/pdf");
}
但是这样做时,我收到一个错误提示
500 无法创建 EDM 模型,因为控制器“Users”上的操作“GenerateUsersReport”具有未实现 IEnumerable 的返回类型“System.Web.Http.IHttpActionResult”。
从该错误中,我了解到 OData 将期望 IEnumerable 之后再次应用查询。 如何消除该问题并仅在我的代码中使用查询,而不是在返回后对其进行过滤?
【问题讨论】:
-
您可以查看answer 以将您的数据作为文件返回。
-
问题是使用 Odata 过滤器将数据作为文件返回,只返回一个文件就完美了