【问题标题】:Await an Anonymous Type等待匿名类型
【发布时间】:2019-03-04 05:54:28
【问题描述】:

在 ASP.NET Core WebApi 控制器中,我尝试返回一个 json { payload: myArray }

[HttpGet]
public async Task<IActionResult> GetEntriesPaged(int? page, int pageSize = 10) {
    ...
    return Ok( await new { payload = query.ToListAsync() }); }

错误 CS1061 'payload>' 不包含 'GetAwaiter' 的定义并且没有可访问的扩展方法 可以找到接受“payload>”类型的第一个参数的“GetAwaiter”(您是否缺少使用 指令还是程序集引用?)

附言。整个功能更好理解

[HttpGet]
public async Task<IActionResult> GetEntriesPaged(int? sourceId, string filter, int? pageIndex, int pageSize = DEFAULT_PAGESIZE, string sortOrder = Order.DESC) {

    IQueryable<Entry> query = _db.Entries;
    // 0. Filter by sourceId 
    if (sourceId.HasValue) {
        query = query.Where(e => e.SourceId == sourceId.Value);
    }

    // 1. Filter by message or subject or from or to
    if (!string.IsNullOrWhiteSpace(filter)) {
        query = query.Where(e => e.Message.Contains(filter) || e.Subject.Contains(filter) || e.From.Contains(filter) || e.To.Contains(filter));
    }

    // 2. Order by Date         
    if (string.IsNullOrWhiteSpace(sortOrder) || sortOrder.ToLower() != Order.ASC) { sortOrder = Order.DESC; }
    sortOrder = sortOrder.ToLower();
    if (sortOrder == Order.ASC) {
        query = query.OrderBy(x => x.Date);
    }
    else {
        query = query.OrderByDescending(x => x.Date);
    }

    // 3. Get paged elements (Skip & Take)
    if (pageIndex.HasValue) {
        if (pageIndex < 0) { pageIndex = 0; }
        if (pageSize < 1) { pageSize = 1; }
        int take = pageSize;
        int skip = (pageIndex.Value * pageSize);

        var paginationMetadata = new {
            totalCount = query.Count(),
            pageSize = pageSize,
            currentPage = pageIndex
        };

        Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata));
        query = query.Skip(skip).Take(take);
    }

    return Ok( await new { payload = query.ToListAsync() });
}

【问题讨论】:

  • 我更新为使用 ToListAsync

标签: .net asynchronous asp.net-web-api controller async-await


【解决方案1】:

您需要等待ToListAsync:

return Ok( new { payload = await query.ToListAsync() });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多