Entenda a diferença entre os Action Results IHttpActionResult e HttpResponseMessage

Aqui no blog tem dois posts sobre teste unitário para controllers no ASP.NET Web API 2, um que explica como fazer usando o HttpResponseMessage e outro que explica usando o IHttpActionResult.

Nesse post vou explicar a diferença entre ambos para que seja possível entender melhor quando usar cada uma deles.

No ASP .NET Web API 2 temos dois tipos de action results que correspondem a uma resposta HTTP da controller: HttpResponseMessage e IHttpActionResult.

Dependendo de qual for escolhido, a controller usa maneiras diferentes de criar a resposta HTTP.

No HttpResponseMessage a controller retorna diretamente uma resposta HTTP. Isto é feito através da criação de um objeto resposta do HttpResponseMessage que possui suas propriedades preenchidas semelhante a uma resposta HTTP convencional.  É possível configurar o conteúdo da resposta, o tipo do dado retornado, ou até mesmo configurar os cabeçalhos dela.

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
response.Content = new StringContent("Blog", Encoding.UTF8);
response.Headers.Location = new Uri("https://luizpauloprado.com.br");
response.Headers.Date = new DateTimeOffset(DateTime.UtcNow);
response.Headers.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromMinutes(30) };

return response;

Em resumo, pode-se dizer que o HttpResponseMessage possibilita um controle bem maior sobre a criação de um resposta HTTP na controller.

Já no IHttpActionResult temos o mesmo conceito de resposta HTTP, só que de maneira mais simplificada e encapsulada. Ele basicamente representa uma factory de HttpResponseMessage.

public IHttpActionResult Get(int id)
{
    var sampleObject = _repository.Get(id);

    if (sampleObject == null)
        return NotFound();

    return Ok(sampleObject);
}

Na documentação oficial do ASP .NET Web API 2 tem uma explicação mais detalhada sobre tudo isso. Vale a pena conferir.

Deixe um comentário