C# OData使用查询参数作为输入,但返回自定义响应
我正在尝试向我的OData控制器添加一个新方法,该方法的目的是基于给定的过滤器生成一个用户报告文件。该过滤器将应用于系统中的所有用户,并在过滤后生成剩余用户的报告。 该报告是一个PDF文件,因此我将其作为字节[]返回,客户端将不得不将其写入磁盘。 这是我的代码:C# OData使用查询参数作为输入,但返回自定义响应,c#,odata,webapi,C#,Odata,Webapi,我正在尝试向我的OData控制器添加一个新方法,该方法的目的是基于给定的过滤器生成一个用户报告文件。该过滤器将应用于系统中的所有用户,并在过滤后生成剩余用户的报告。 该报告是一个PDF文件,因此我将其作为字节[]返回,客户端将不得不将其写入磁盘。 这是我的代码: [HttpGet] public IHttpActionResult GenerateUsersReport(ODataQueryOptions options) { var users = (I
[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模型,因为控制器“用户”上的操作“GenerateUsersReport”的返回类型“System.Web.Http.IHttpActionResult”未实现IEnumerable
从这个错误中,我了解到OData希望IEnumerable在以后再次应用查询。
我怎样才能消除这个问题,只在我的代码中使用如图所示的查询,而不在返回后对其进行过滤?我知道这是旧的,但它仍然会在搜索中弹出。因此,现在这将起作用,但在出现问题时可能不起作用:
public IHttpActionResult GenerateUsersReport(ODataQueryOptions<User> options)
如果我的假设是在名为User的实体上执行此操作。您可以检查此选项以将数据作为文件返回。问题是使用Odata筛选器将数据作为文件返回,仅返回一个文件就可以了