4
respostas

IActionResult vs ActionResult

Gostaria de entender melhor a diferença entre usar o "public Task <ActionResult<"ClasseQualquer">> NomeDoMetodo()" ou de usar apenas "public IActionResult NomeDoMetodo()"

4 respostas

Fala ngelo, beleza?

As duas formas funcionam como um retorno, a diferença é:

public IActionResult NomeDoMetodo() é um retorno genérico onde qualquer classe que implementa IActionResult pode ser retornada.

public Task <ActionResult<"ClasseQualquer">> NomeDoMetodo() estamos espeficicando um ActionResult com um tipo que pode ser qualquer classe, nesse caso deixamos claro qual é o tipo do objeto que vai ser retornado.

Dá pra perceber essa diferença no swagger que é uma ferramenta que funciona como uma documentação para api.

IActionResult Imagem codigo IActionResult O retorno fica genérico Imagem swagger

ActionResult Imagem codigo ActionResult

O retorno fica específico Imagem swagger

Eu ainda não to manjando de usar o service e repositories injetando dependencia... mas aqui o meu retorno com IActionResult, está igual ao seu com ActionResult... Mas acho que entendi que, com o Action, você consegue determinar que o retorno só pode ser daquela class/entidade específica. Onde numa situação do retorno de uma query fosse errado por exemplo, ao inves de ter feitar a query para despesas fizesse para receita, o ActionResult não permitiria. Por que ele aguarda o retorno, no seu exemplo, de DespesaDto, e veio um de ReceitaDto. Seria isso? Mas no ponto de funcionamento não muda né? Performance e tal, tudo igual, so "perdemos esse controle" ao usar a interface.

Isso mesmo, com o Action, você consegue determinar que o retorno só pode ser daquela classe/entidade específica! não influencia na performance! Mas deixar de forma clara o que vai ser retornado facilita no entendimento do código

Obs: As imagens que postei são do swagger sem executar qualquer ação, ou seja aquele exemplo que aparece onde tem o ActionResult é do momento assim que roda o projeto antes mesmo de fazer a solicitação para rota, o seu só com o IActionResult apareceu essa forma antes de executar a rota?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Sim, apareceu ja com o modelo. Acho que isso é do swagger mesmo. não tem a ver com o IAction e Action. Mas consegui entender melhor e internalizar de fato a utilidade. Obrigado. Vou passar adota a Action de agora em diante, pois me parece ser uma melhor prática. Mas entendo que nada impede de usar a IAction tambem. Obrigado!