Jump to content
rdavisp

ASP.NET Core API para acesso a mais de uma apicação em Angular

Recommended Posts

Senhores, bom dia.

Mais uma vez recorro a ajuda de vocês para algo que não domino ainda. Vamos lá!

Tenho uma API que quando startada, ela sobe no seguinte endereço: http://localhost:49013/api/values. Percebi que isto é parametrizado no arquivo launchSettings.json, que está assim:

 

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:49013/",
      "sslPort": 0
    }
  },
  "profiles": 
  {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Cliente.IG.WebAPI": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:49012/"
    }
  }
}

 

No meu controller da API, tenho seguinte método dentro do namespace:

 

    [Produces("application/json")]
    [Route("api/IG")]
    [ApiController]
    public class IGController : Controller
    {
        [HttpPost]
        public IGResult Post([FromBody] Filtro filtro)
        {
            var app = new IgApplication();
            return app.getInstrucoes(filtro);
        }
    }

 

O "IgApplication" cria uma instância da classe onde é gerado uma lista que é populada com os valores atribuídos do DAO.

 

Quando inicializo a aplicação "A" em angular através do localhost (http://localhost:4200/). Dentro do meu arquivo environment.prod.ts tenho a chamada:

 

export const environment = {
  production: true,
  url: 'http://localhost:49013/'
};

 

Ela passa por esse controller e segue o fluxo e faz o que tem que ser feito. 

Porém, eis a questão! Eu possuo a aplicação "B", que acessa a mesma API porém possui funcionalidades diferente, por isso, dentro do mesmo controller eu criei uma nova classe e um método:

 

    [Produces("application/json")]
    [Route("api/Item")]
    public class APIIgItemController : Controller
    {
        [HttpGet]
        public ItensResult Post([FromBody] Itens ValorItem)
        {
            var app = new CRUDApplication();
            return app.GetItens();
        }
    }

 

Como faço para quando for startar a aplicação "B", ele passe por esse método "ItensResult" ao invés "IGResult", sendo que ambas são executadas pelo localhost:4200? Ou isso eu defino na aplicação angular? Vi que é possível configurar mais de uma "applicationUrl" dentro do json. Devo considerar essa configuração?

 

Grato a quem puder ajudar!

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rdavisp
      Senhores, boa tarde.

      Pesquisei muito antes de abrir esse post, inclusive aqui, neste fórum. Encontrei dúvidas parecidas as quais tentei adaptar ao meu caso porem sem sucesso.

      A questão é a seguinte:

      Foi desenvolvida uma API em ASP.NET Core 2.0, mas por algumas solicitações do cliente, necessitei migrar para a versão 3.1. Existe uma SPA em Angular 7 que faz a requisição à API através de um método POST passando os parâmetros para a API que retornava um conjunto de dados para aplicação montar a tela. Após a atualização parou de funcionar! Por isso, gostaria de pedir a ajuda de vocês, por que, eu já esgotei as minhas tentativas.

      **No Controller da API está da seguinte maneira:**
       
      1 2 3 4 5 6 7 8 [HttpPost] [Route("api/[controller]")] public IGResult Post(Filtro filtro) {     Console.WriteLine("filtro: " + filtro);     var app = new IgApplication();     return app.getInstrucoes(filtro); }
      **E no angular se encontra dessa forma:**
       
      1 return this._http.post<IgResult>(environment.url + 'api/IG',  this.Filtro, options)

      Ao debugar a API, percebo que os dados do parâmetro **body** chegam nulos. Já tentei das seguintes maneiras abaixo, mudar a implementação do POST na API porém sem sucesso:
       
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 > //public async Task<IActionResult> Post([FromBody] Filtro pessoa) >         //public HttpResponseMessage Post(Filtro pessoa) >         //public async Task<ActionResult<IList<Todo>>> Create([FromBody]TodoCreateViewModel model) >         //public Task<IActionResult> Post([FromBody] Filtro filtro) >         //public ActionResult<Filtro> Post([FromBody] Filtro filtro) >         //public HttpResponseMessage Post(Filtro filtro) >         //public string Post([FromBody] Filtro filtro) >         //public IActionResult Post([FromBody] Filtro filtro) >         //{ >         //var app = new IgApplication(); >         //return app.getInstrucoes(filtro); >         //return null;// Json(filtro); >         //} >         //public async System.Threading.Tasks.Task<string> Post(HttpRequestMessage request) >         //{ >         //    string body = await request.Content.ReadAsStringAsync(); >         //    return body; >         //}

      Por isso se possível, gostaria muito de contar com a colaboração de vocês.

      Desde já muito obrigado!
    • By AlexandrePrezzi
      Boa tarde ...
       
       
      Sou iniciante trabalhando com React e estou com uma missão de fazer um sistema  com autenticação de usuário . 
      Para esse teste criamos uma API  com apenas o campo de usuário ( nao tem senha por enquanto) ....  

      Minha ideia é fazer um formulario em que se a pessoa digitar um usuario válido  esta ok para entrar no sistema
       
      Consegui fazer a tela e o acesso a API....  porem quando vou  entrar no sistema me retorna:
       
      Seguindo um manual estou com o código da seguinte forma:
       
      const requestInfo = { method: 'POST', body: JSON.stringify(data), headers: new Headers({ 'Content-Type': 'application/json', }), }; fetch('http://10.0.0.49:9000/login', requestInfo) .then(response => { console.log(response); if(response.ok) { return response.json() } throw new Error("Login inválido..."); }) .then(token => { localStorage.setItem('token', token); this.props.history.push("/admin"); return; }) .catch(e => { this.setState({ message: e.message }); }); }  
      Queria ver se alguém ja passou por algo parecido... ou se tem alguma sugestão para solução desse problema.
       
      Aparece o seguinte erro: Unexpected token V in JSON at position 0
       
      Aguardo retornos
       
      Obrigado
       
       
       
       
       
      Qu
    • By mtwzim
      Olá pessoal, recentemente eu venho desenvolvendo um app para pagamentos/cartões pré-pago, e estou procurando alguma empresa/api que forneça um serviço apara emissão de cartões pré-pagos (e que seja possível customizar os cartões: por a minha própria logo, etc), alguém pode me informar alguma empresa que faz isso aqui no brasil? Já encontrei soluções como stripe mas eles não oferecem esse serviço para o brasil?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.