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.