How to return a list of objects in the ASP.NET Web API async controller method or wrap a list inside the Task object?
Class:
public class SubscriberHistory
{
public string Date;
public string Message;
public SubscriberHistory(string Date, string Message)
{
this.Date = Date;
this.Message = Message;
}
}
Controller:
[HttpGet("[action]/{accountNumber}")]
public Task<SubscriberHistory> GetSubscriberHistory(string accountNumber)
{
SubscriberManager subsManager = new SubscriberManager();
return subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}
Controller Manager:
public async List<SubscriberHistory> GetSubscriberHistory()
{
List<SubscriberHistory> List = new List<SubscriberHistory>();
// HttpClient get data
return List; // ?
}
Never return a Task
from an action method if you are not executing anything async
: it is useless and will also adds unnecessary overhead to your call.
To return a list of objects, simply declare the correct return type:
[HttpGet("[action]/{accountNumber}")]
public List<SubscriberHistory> GetSubscriberHistory(string accountNumber)
{
SubscriberManager subsManager = new SubscriberManager();
return subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}
If you, instead, want to do it asynchronously, then you'll have to return a Task<T>
and await the result:
[HttpGet("[action]/{accountNumber}")]
public async Task<List<SubscriberHistory>> GetSubscriberHistory(string accountNumber)
{
SubscriberManager subsManager = new SubscriberManager();
return await subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}
And in your manager:
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;
}
If you want to use Async Controller, you need to update your code like this:
[HttpGet("[action]/{accountNumber}")]
public async Task<IHttpActionResult> GetSubscriberHistory(string accountNumber)
{
SubscriberManager subsManager = new SubscriberManager();
return await subsManager.GetSubscriberHistoryByAccountNumber(accountNumber);
}
There should be async and await in your Controller function if you want to use Async controller. Thanks!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With