Consumo de APIs em .NET Core: utilizando a Marvel Comics API

Este artigo tem por objetivo demonstrar o consumo de APIs REST em .NET Core, utilizando para isto recursos que integram uma API disponibilizada gratuitamente pela Marvel Comics.
Introdução
O consumo de APIs REST é uma prática extremamente comum nos mais variados tipos de aplicações. Muito deste trabalho consiste no envio de requisições contendo configurações para autenticação como tokens e chaves de acesso, com o consequente recebimento de dados no padrão JSON (o padrão XML representa ainda outra possibilidade).
A implementação de soluções na plataforma .NET não foge a esta regra. No caso específico do .NET Core temos a classe HttpClient (namespace System.Net.Http), a qual disponibiliza meios para o envio de solicitações HTTP e o posterior tratamento das respostas obtidas.
Este artigo tem por objetivo demonstrar o consumo de APIs REST em uma aplicação ASP.NET Core 1.1. Isto acontecerá através de um exemplo de utilização da Marvel Comics API, um conjunto de recursos gratuitos que permite o acesso a um vasto conteúdo de informações sobre personagens do universo Marvel.
Obtendo o acesso à Marvel Comics API
Para acessar os recursos da Marvel Comics API serão utilizadas uma chave pública e outra privada, com a geração das mesmas acontecendo por meio do cadastramento de um login no seguinte portal:
Na imagem a seguir é possível observar as informações de uma conta de desenvolvimento para uso da Marvel Comics API. Além das chaves pública e privada, será necessário indicar ainda os domínios de aplicações que utilizarão a API (nota-se ainda um aviso com um limite diário de uso):

A documentação dos diferentes recursos que integram a Marvel Comics API está disponível no seguinte endereço:
https://developer.marvel.com/docs
Esta API faz uso do Swagger para a documentação e teste das funcionalidades existentes, conforme detalhado na próxima imagem:

Detalhes adicionais sobre assinaturas e envio de requisições podem ser encontrados no link a seguir:
Exemplo de consumo com o .NET Core
O código-fonte da aplicação apresentada nesta seção já está no GitHub:
https://github.com/renatogroffe/ASPNETCore_MarvelComicsAPI
A Marvel Comic API será acessada através do seguinte endereço:
http://gateway.marvel.com/v1/public/
Uma classe chamada Personagem será implementada, a fim de facilitar a passagem de informações entre o Controller e a View responsáveis pela exibição de informações:
A Action Index de HomeController acessará a API da Marvel, empregando para isto uma instância do tipo HttpClient:
- Inicialmente será configurado o formato utilizado na comunicação (JSON), com isto acontecendo por meio da propriedade DefaultRequestHeaders e de uma instância da classe MediaTypeWithQualityHeaderValue (namespace System.Net.Http);
- Requisições enviadas à API deverão conter como parâmetros um timestamp (sequência de identificação de cada requisição), a chave pública e um hash criptografado baseado no padrão MD5;
- Para o timestamp será utilizada a propriedade Ticks obtida via data atual do sistema (essa estrutura retornará um valor do tipo long);
- A função GerarHash concatenará o timestamp e as duas chaves (pública e privada), fazendo uso para isto dos tipos Encoding (namespace System.Text), MD5 (namespace System.Security.Cryptography) e BitConverter (namespace System). Como resultado será produzida uma string com o hash esperado pela API;
- A solicitação será enviada à API da Marvel, a partir da invocação do método GetAsync do objeto client. Essa operação receberá como parâmetro a URL para consulta a informações de personagens Marvel, estando configurada para retornar detalhes (em inglês) sobre o Capitão América. O resultado desta ação será uma referência do tipo HttpResponseMessage (namespace System.Net.Http);
- A chamada ao método EnsureSuccessStatusCode de HttpResponseMessage fará com que a mensagem recebida seja validada, lançando uma exceção no caso de um eventual problema;
- Ao acionar a operação ReadAsStringAsync via propriedade Content do objeto response será retornada uma string JSON com informações;
- O método DeserializeObject da classe JsonConvert (namespace Newtonsoft.Json) receberá como parâmetro essa string, devolvendo um objeto que será associado à variável dinâmica resultado;
- Uma instância da classe Personagem será finalmente gerada, empregando para isto dados obtidos através do conteúdo associado à variável resultado. O método View é então invocado, recebendo como parâmetro esta última referência.
Na View Index.cshtml serão exibidas as informações obtidas ao acessar a API da Marvel em HomeController:
Testes
Ao executar a aplicação a partir do Visual Studio 2017 aparecerão informações em inglês sobre o personagem Capitão América:

