Cómo devolver una lista de objetos en el ASP.NET Web API asincrónicas método de controlador o una envoltura de una lista dentro de la Tarea objeto?

Clase:

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

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

Controlador:

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

Administrador De Controlador:

public async List<SubscriberHistory> GetSubscriberHistory()
{
    List<SubscriberHistory> List = new List<SubscriberHistory>();
    //HttpClient get data
    return List; //?
}
InformationsquelleAutor blindpilot | 2016-05-19

2 Comentarios

  1. 3

    Nunca devolver un Task de un método de acción si no se ejecuta nada async: es inútil y también le agrega una sobrecarga innecesaria para su llamada.

    Para devolver una lista de objetos, se limitó a declarar la respuesta correcta tipo:

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

    Si, en cambio, desea hacerlo de forma asincrónica, entonces usted tendrá que devolver un Task<T> y esperar el resultado:

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

    Y en su 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;
    }
    • Gracias, Federico! Dentro de mi método estoy tratando de conseguir los datos de un servicio web y para hacer eso tengo que usar la clase HttpClient, que a su vez utiliza los métodos asincrónicos
    • He añadido el asincrónica enfoque dentro de la respuesta. Siempre recuerde que para poder utilizar async/await toda su cadena de llamadas debe convertirse en async y devolver un Task/Task<T>.
    • Genial!!! Gracias Federico. Eso es lo que necesito.
  2. 1

    Si desea utilizar el Controlador Asincrónico, usted necesita para actualizar su código como este:

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

    Debe ser async y await en su función de control si desea utilizar el controlador Asincrónico.
    Gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here