首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确保webapi控制器从异步方法中获取全部数据?

如何确保webapi控制器从异步方法中获取全部数据?
EN

Stack Overflow用户
提问于 2022-03-10 22:08:22
回答 1查看 73关注 0票数 0

我有一个webapi服务,这个服务的控制器正在调用一个远程webapi来获取数据。

我有一个示例控制器,它具有以下测试方法:

代码语言:javascript
复制
    [HttpGet("activity")]
    public ActionResult<BoredAPIDM> GetActivity()
    {
        Processor pr = new Processor();
        object data = pr.GetActivity();
        Debug.WriteLine(data); // Breakpoint
        return Ok();
    }

处理器类具有以下方法:

代码语言:javascript
复制
    public async Task GetRemoteActivity()
    {
        string baseURL = $"https://www.boredapi.com/api/activity";

        using (var client = new HttpClient())
        {

            client.BaseAddress = new Uri(baseURL);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            HttpResponseMessage response = await client.GetAsync("activity");

            if (response.IsSuccessStatusCode)
            {
                string result = response.Content.ReadAsStringAsync().Result;
                DataTable dt = JsonConvert.DeserializeObject<DataTable>(result);
            }
            else
            {
                Debug.WriteLine($"Error calling the API from {baseURL}");
            }
        }
    }

因此,我期待的是GetRemoteActivity()方法中的数据内容,但是它没有进入GetActivity()方法,并且调试行上的断点显示:

代码语言:javascript
复制
Id = 117, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"

我觉得我遗漏了一个完整的观点,这是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 23:52:38

这里少了很多,所以我试着帮你把它分解一下:

  • object data = pr.GetActivity();应该调用GetRemoteActivity吗?

代码语言:javascript
复制
var data = await pr.GetRemoteActivity(); // prefix the current method with async

  • public async Task GetRemoteActivity()不返回DataTable.

代码语言:javascript
复制
public async Task<DataTable> GetRemoteActivity()

  • using (var client = new HttpClient())应该是一个单例,从不在每个方法调用中更新。

  • DataTable dt = JsonConvert.DeserializeObject<DataTable>(result);您确定这将正确绑定到JSON吗?我对此深表怀疑,但请检查API响应。这可能需要一个与响应匹配的单独的DTO。

调试器返回

  • ,因为您需要对调用进行await。Awaitable调用延迟加载,直到执行适当的等待时才执行。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71431375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档