Xamarin – Como consumir uma api local que roda no IIS Express no emulador
Aprenda a consumir uma api local direto do emulador
Hoje venho trazer uma dica bem interessante para vocês, irei explicar como podemos rodar 2 projetos ao mesmo tempo, um que rodará nosso emulador e outro que rodará nossa api local diretamente no IIS Express usando de quebra o modo debug.
Tenho um projeto na seguinte estrutura abaixo:
Como podemos ver eu tenho uma pasta ClientSide onde fica todo o código dos meus apps e tenho uma pasta ServerSide que fica meu código que roda no servidor que no caso é uma Web Api.
Na pasta ClienteSide temos um projeto chamado NewPlayer do tipo Portable, é nele que eu crio minhas Views, ViewModels e etc.
Também é neste projeto que eu consumo minha API.
Para debugar meu aplicativo e minha WebApi ao mesmo tempo eu configuro meu Visual Studio para iniciar 2 projetos de uma vez, basta clicar com o botão direito na solução e ir em propriedades, você verá uma tela parecida com essa abaixo:
Como podemos ver eu inicio meu projeto Android e minha Api ao mesmo tempo. Mas um problema muito comum que nós temos é ao tentar acessar API pelo aplicativo não conseguimos.
Como podemos ver acima a WebApi está rodando normalmente em meu computador.
Mesmo que você chame no seu App assim http://localhost:58529/api/test/v1/online, ele não vai enxergar simplesmente por ele ser uma máquina virtual, ou seja, é como se fosse um outro computador.
Ai você pensa, vou passar meu IP, também não irá funcionar.
A primeira solução é fazer um deploy de sua WebApi para o IIS e depois chamar o diretório virtual que você criou.
A segunda solução que é a que vim propor a vocês, é configurar nossa máquina, para que o aplicativo consiga consumir sua API que foi levantada direto do seu Visual Studio através do IIS Express, assim você poderá debugar tanto o aplicativo como a API enquanto o Visual Studio tiver rodando.
Para isso é bem simples.
Vamos utilizar o gerenciador de pacotes NPM para instalar o iisexpress-proxy. Para isso iremos precisar de ter o Node.js instalado na máquina.
Para baixar e instalar o Node.JS acesse https://nodejs.org/en/
Após instalar o Node.Js é bem simples, basta instalar o pacote do iisexpress-proxy em nossa máquina.
Para isso abra o prompt do Node.Js em sua máquina e digite.
1 |
npm install -g iisexpress-proxy |
Após instalar vamos dar o comando que vai substituir a porta do seu IIS Express para uma porta que o Emulador entenda.
1 |
iisexpress-proxy PortaDaApi to 3000 |
Como podemos ver eu to substituindo a porta de minha API 58529 para 3000
Agora basta em nosso aplicativo mudar a url de nossa api, ficando assim http://192.168.0.102:3000/api/test/v1/online
Substitua o localhost pelo IP de sua máquina e a porta 3000 que você acabou de criar.
No código de nosso serviço ficaria algo mais ou menos assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
namespace NewPlayer.Api.Base { public class RestClient { /// <summary> /// RestClient implements methods for calling CRUD operations /// using HTTP. /// </summary> public class GenericRestClient<T> { string WebServiceUrl = "http://192.168.0.102:3000/api/" + typeof(T).Name.ToString() + "s/"; public async Task<List<T>> GetAsync() { var httpClient = new HttpClient(); var json = await httpClient.GetStringAsync(WebServiceUrl); var taskModels = JsonConvert.DeserializeObject<List<T>>(json); return taskModels; } public async Task<bool> PostAsync(T t) { var httpClient = new HttpClient(); var json = JsonConvert.SerializeObject(t); HttpContent httpContent = new StringContent(json); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var result = await httpClient.PostAsync(WebServiceUrl, httpContent); return result.IsSuccessStatusCode; } public async Task<bool> PutAsync(int id, T t) { var httpClient = new HttpClient(); var json = JsonConvert.SerializeObject(t); HttpContent httpContent = new StringContent(json); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var result = await httpClient.PutAsync(WebServiceUrl + id, httpContent); return result.IsSuccessStatusCode; } public async Task<bool> DeleteAsync(int id) { var httpClient = new HttpClient(); var response = await httpClient.DeleteAsync(WebServiceUrl + id); return response.IsSuccessStatusCode; } } } } |
Bom espero que tenham gostado da dica!
Até a próxima!
About author
You might also like
15 ferramentas que todo desenvolvedor web deveria conhecer!
Share this on WhatsAppHoje venho compartilhar com vocês 15 ferramentas que aumentam e muito minha produtividade em meu dia a dia. São ferramentas online que podem acelerar bastante o nosso
Criando Componente Accordion List com Ionic 3
Share this on WhatsAppOlá Galera.. tudo tranquilo? Sou novo por aqui e hoje vou trazer uma dica para deixar sua aplicação mobile um pouco mais intuitiva para o usuário, criando
Validando dados com a classe ArgumentValidator no C#
Share this on WhatsAppConheça a classe ArgumentsValidator E ai pessoal beleza? Hoje gostaria de compartilhar com vocês uma classe que eu criei que nos auxilia na validação de dados. Há
13 Comments
Oziel Guimarães
maio 16, 15:11Paulo Rogério
maio 16, 16:08Eclesio Melo
maio 22, 01:42Paulo Rogério
maio 22, 08:16vagner correa
maio 24, 13:54Gandalf
agosto 04, 21:14levy
agosto 20, 10:00alehlima018
novembro 17, 17:08Alexandro
janeiro 21, 23:44Alessandre
agosto 12, 12:48Marco Antonio
janeiro 03, 22:37vagnercds
julho 25, 10:16Links Uteis – Totvers Advpl
maio 29, 10:06