繁体   English   中英

如何在ASP.NET Web API异步控制器方法中返回对象列表

[英]How to return a list of objects in ASP.NET Web API async controller method

如何在ASP.NET Web API异步控制器方法中返回对象列表或在Task对象中包装列表?

类:

public class SubscriberHistory
{
  public string Date;
  public string Message;

  public SubscriberHistory(string Date, string Message)
  {
    this.Date = Date;
    this.Message = Message;
  }
}

控制器:

[HttpGet("[action]/{accountNumber}")]
public Task<SubscriberHistory> GetSubscriberHistory(string accountNumber)
{
    SubscriberManager subsManager = new SubscriberManager();
    return subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}

控制器经理:

public async List<SubscriberHistory> GetSubscriberHistory()
{
    List<SubscriberHistory> List = new List<SubscriberHistory>();
    // HttpClient get data
    return List; // ?
}

如果您没有执行任何async操作,则永远不要从操作方法返回Task :它没用,并且还会给您的调用增加不必要的开销。

要返回对象列表,只需声明正确的返回类型:

[HttpGet("[action]/{accountNumber}")]
public List<SubscriberHistory> GetSubscriberHistory(string accountNumber)
{
    SubscriberManager subsManager = new SubscriberManager();
    return subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}

相反,如果你想异步地执行它,那么你将不得不返回一个Task<T>并等待结果:

[HttpGet("[action]/{accountNumber}")]
public async Task<List<SubscriberHistory>> GetSubscriberHistory(string accountNumber)
{
    SubscriberManager subsManager = new SubscriberManager();
    return await subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}

在你的经理:

public async Task<List<SubscriberHistory>> GetSubscriberHistory()
{
    List<SubscriberHistory> list = new List<SubscriberHistory>();
    var result = await client.GetAsync("http://myhost/mypath");
    //Your code here
    return list;
}

如果要使用Async Controller,则需要更新代码,如下所示:

[HttpGet("[action]/{accountNumber}")]
public async Task<IHttpActionResult> GetSubscriberHistory(string accountNumber)
{
    SubscriberManager subsManager = new SubscriberManager();
    return await subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}

如果要使用异步控制器,则应在控制器功能中存在异步和等待。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM