【问题标题】:C# OData use query parameter as input but return a custom responseC# OData 使用查询参数作为输入,但返回自定义响应
【发布时间】: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 过滤器将数据作为文件返回,只返回一个文件就完美了

标签: c# odata webapi


【解决方案1】:

我知道这是旧的,但它仍然会在搜索中弹出。所以,现在这将起作用(在问题的时候它可能不起作用):

public IHttpActionResult GenerateUsersReport(ODataQueryOptions<User> options)

如果我假设这将在名为 User 的实体上执行。

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多