Asynchronous .NET核心Web API异步数据返回

Asynchronous .NET核心Web API异步数据返回,asynchronous,asp.net-core-mvc,asp.net-core-webapi,Asynchronous,Asp.net Core Mvc,Asp.net Core Webapi,我正试图以异步方式在GET HTTP响应中处理将数据返回到APi客户机的问题,但到目前为止运气不佳 我的代码: using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Server.Database; using System; using System.Threading.Tasks; namespace Server.Controllers { //[Produces("applicati

我正试图以异步方式在GET HTTP响应中处理将数据返回到APi客户机的问题,但到目前为止运气不佳

我的代码:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Server.Database;
using System;
using System.Threading.Tasks;

namespace Server.Controllers
{
    //[Produces("application/json")]
    [Route("api/[Controller]")]
    public class UserController : Controller
    {
        private readonly DBContext _context;

        public UserController(DBContext context)
        {
            _context = context;
        }

        [HttpGet("/Users")]
        public async Task<IAsyncResult> GetUsers()
        {
            using (_context)
            {
                // how to properly return data asynchronously ? 
                var col = await _context.Users.ToListAsync();
            }
        }

        [HttpGet("/Users/{id}")]
        public async Task<IActionResult> GetUserByID(Int32 id)
        {

            using (_context)
            {
                //this is wrong, I don't knwo how to do it properly
                //var item = await new ObjectResult(_context.Users.FirstOrDefault(user => user.IDUser == id));
            }
        }
    }
}
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.EntityFrameworkCore;
使用服务器数据库;
使用制度;
使用System.Threading.Tasks;
命名空间服务器.控制器
{
//[产生(“应用程序/json”)]
[路由(“api/[控制器]”)]
公共类UserController:Controller
{
私有只读DBContext\u context;
公共用户控制器(DBContext上下文)
{
_上下文=上下文;
}
[HttpGet(“/Users”)]
公共异步任务GetUsers()
{
使用(_上下文)
{
//如何正确地异步返回数据?
var col=wait_context.Users.ToListAsync();
}
}
[HttpGet(“/Users/{id}”)]
公共异步任务GetUserByID(Int32 id)
{
使用(_上下文)
{
//这是错误的,我不知道如何正确地做
//var item=wait new ObjectResult(_context.Users.FirstOrDefault(user=>user.IDUser==id));
}
}
}
}
如您所见,我希望通过返回所有用户,并在另一种方法中通过ID返回单个用户,从而异步处理GET请求。我不知道是否还需要
ObjectResult
类,但我需要向客户端响应JSON对象。有人知道怎么做吗

在这里,试试这个:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Server.Database;
using System;
using System.Threading.Tasks;

namespace Server.Controllers
{
    //[Produces("application/json")]
    [Route("api/[Controller]")]
    public class UserController : Controller
    {
        private readonly DBContext _context;

        public UserController(DBContext context)
        {
            _context = context;
        }

        [HttpGet("/Users")]
        public async Task<IActionResult> GetUsers()
        {
            return Json(await _context.Users.ToListAsync());            
        }

        [HttpGet("/Users/{id}")]
        public async Task<IActionResult> GetUserByID(Int32 id)
        {
            return Json(await new _context.Users.FirstOrDefault(user => user.IDUser == id));          
        }
    }
}
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.EntityFrameworkCore;
使用服务器数据库;
使用制度;
使用System.Threading.Tasks;
命名空间服务器.控制器
{
//[产生(“应用程序/json”)]
[路由(“api/[控制器]”)]
公共类UserController:Controller
{
私有只读DBContext\u context;
公共用户控制器(DBContext上下文)
{
_上下文=上下文;
}
[HttpGet(“/Users”)]
公共异步任务GetUsers()
{
返回Json(wait_context.Users.toListSync());
}
[HttpGet(“/Users/{id}”)]
公共异步任务GetUserByID(Int32 id)
{
返回Json(等待新的_context.Users.FirstOrDefault(user=>user.IDUser==id));
}
}
}

注意,在
GetUsers
中,必须返回
IActionResult
,而不是
IAsyncResult

首先,使用DbContext是个坏主意,最好在
Startup
中注册它,其次,尝试返回
Json
,类似这样:
返回Json(等待context.Users.ToListAsync())
感谢@Yuriy N的回答。
Json(wait\u context.Users.ToListAsync())
的问题是我有
无法将类型“Microsoft.AspNetCore.Mvc.JsonResult”隐式转换为“System.IAsyncResult”
错误。我已经回答了这个问题。