Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

576
Views
No puedo decidir entre Task<IActionResult>, IActionResult y ActionResult<Thing>

Si bien entiendo el concepto de Task , ActionResult , etc. Todavía no estoy seguro de cuál sería más intuitivo para escribir en un controlador si no se especifica nada más.

Teniendo en cuenta ser tan explícito con un tipo devuelto, debería hacerlo así:

 [HttpGet] public ActionResult<Thing> Get() { return Ok(Context.Things); }

Sin embargo, al optar por un tipo genérico de paradigma de API, debería usar esto:

 [HttpGet] public IActionResult Get() { return Ok(Context.Things); }

Finalmente, respetando la naturaleza asíncrona de la filosofía API debo aplicar lo siguiente:

 [HttpGet] public Task<IActionResult> Get() { return Ok(Context.Things); }

No puedo decidir cuál es el más apropiado en un escenario general de campo nuevo. Los dos primeros funcionan aparentemente. Intuitivamente, preferiría ir con el tercero, pero como no funcionó (la conversión no es válida), me preocupé de que tal vez estaba ladrando en el árbol binario equivocado.

No estoy seguro de cómo buscarlo en Google y estoy obteniendo todo tipo de ejemplos. No estoy seguro de cómo juzgar cuáles son relevantes, prefiero preguntar.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Aquí hay una comparación rápida de las diferentes opciones de devolución:

Tipo específico

 public Thing Get() { return Context.Things.GetThing(1234); }

Esto está bien si la acción siempre devolverá un tipo posible. Sin embargo, la mayoría de las acciones pueden devolver excepciones (es decir, códigos de estado distintos de 200) que tienen diferentes tipos.

Tipo IActionResult

Esto resuelve el problema anterior ya que el tipo de devolución IActionResult cubre diferentes tipos de devolución.

 public IActionResult Get() { Thing thing = Context.Things.GetThing(1234); if (thing == null) return NotFound(); else return Ok(thing); }

Para una acción asíncrona, use Task<IActionResult> :

 public async Task<IActionResult> Get() { Thing thing = await Context.Things.GetThing(1234); if (thing == null) return NotFound(); else return Ok(thing); }

Tipo de resultado de acción

ASP.NET Core 2.1 introdujo el tipo de retorno ActionResult<T> que ofrece los siguientes beneficios sobre el tipo IActionResult :

1- El tipo de retorno esperado de la acción se deduce de la T en ActionResult<T> . Si decora su acción con el atributo [ProducesResponseType] , ya no necesita especificar explícitamente su propiedad Type . Por ejemplo, simplemente puede usar [ProducesResponseType(200)] en lugar de [ProducesResponseType(200, Type = typeof(Thing))] .

2- T se convierte en ObjectResult , lo que significa return new ObjectResult(T); se simplifica para return T; .

 public ActionResult<Thing> Get() { Thing thing = Context.Things.GetThing(1234); if (thing == null) return NotFound(); else return thing; }

Para una acción asíncrona, use Task<ActionResult<T>> :

 public async Task<ActionResult<Thing>> Get() { Thing thing = await Context.Things.GetThing(1234); if (thing == null) return NotFound(); else return thing; }

Para obtener más detalles, puede consultar la página de MSDN Tipos de retorno de acción del controlador en ASP.NET Core Web API .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!