segunda-feira, 15 de agosto de 2016

Implementando requisição HTTP utilizando CORS (Cross-Origin Resource Sharing) - C#



Antes de começarmos a implementar um exemplo de requisição HTTP CORS, vamos entender um pouco sobre esse conceito.

CORS (compartilhamento de recursos de origem cruzada), permite que os recursos de uma aplicação sejam acessados por um domínio diferente, ou seja, este mecanismo permite a transferência de dados entre domínios de forma segura.

Isso acontece porque os navegadores - por questão de segurança, permitem apenas que os recursos de uma aplicação sejam consumidos pelo seu próprio domínio.

Para que este compartilhamento ocorra, precisamos definir novos cabeçalhos HTTP, permitindo que outro domínio consuma os nossos recursos.

Neste exemplo, vamos trabalhar com o método POST, porém são permitidos ainda os métodos GET e HEAD.

A ideia é disponibilizar um recurso para Upload de arquivos.

Primeiramente, vamos definir os cabeçalhos que permitirão o compartilhamento do nosso recurso:

1) "Access-Control-Allow-Headers": Define quais cabeçalhos HTTP poderão realizar a solicitação;
2) "Access-Control-Allow-Origin": Define qual será o domínio que consumirá este recurso;
3) "Access-Control-Allow-Methods": Define o método HTTP que será utilizado.

Este cabeçalho é enviado na requisição chamada "OPTIONS", que será consumida antes dos métodos POST, GET e HEAD.

Muito bem, chegou a hora de programarmos:

1) Crie uma nova aplicação do tipo Asp.NET Web Application e vamos chama-la de: ExemploCors




 2) Defina este projeto do tipo WebAPI - Empty




3) No projeto, adicione uma nova pasta com o nome Modulo




4) Na pasta Modulo, crie uma classe com o nome HeaderOptions e implemente o seguinte código:

Importante: No cabeçalho: "Access-Control-Allow-Origin", "http://dominio.com.br" , não esqueça de alterar para a URL do parceiro que irá consumir a sua aplicação.


5) Na pasta Controllers, crie um novo controle do tipo Web API 2 Controller - Empty e defina o nome para CorsController




6) Precisamos adicionar a referência System.Web.Http.Cors,  para isto, clique em References e com o botão esquerdo escolha Manage NuGet Packages




No campo busca, digite: Cors
Após o resultado da busca, escolha a opção: Microsoft ASP.NET Web API Cross-Origin Support , clique em Install.



7) Implemente o código abaixo:

Importante: Note que habilitamos novamente o cabeçalho HTTP Cors na chamada [HttpPost], não esqueça de alterar a configuração origins: "http://dominio.com.br" , para a URL do parceiro que irá consumir a sua aplicação.




8) No arquivo Web.config, precisamos referenciar o módulo HeaderOptions dentro da referência:  <system.webServer>




9) Para finalizar, no arquivo App_Start/WebApiConfig.cs, inclua o código abaixo:

config.EnableCors();




Agora chegou a hora de testar. Vamos utilizar o Postman para isso.

OBS.: Postman donwload: https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop


No Visual Studio, clique no menu DEBUG, escolha a opção Start Debugging.



Após isso, vamos para o Postman, e siga a configuração abaixo:






Fonte de pesquisa: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
                                https://pt.wikipedia.org/wiki/Cross-origin_resource_sharing