Error al hacer una peticion post en angular usando application/json – angularjs ionic azure

Pregunta:


Anteriormente realizaba una petición usando lo siguiente en los Headers

'Content-Type': 'application/x-www-form-urlencoded'

Pero ahora la API me pide que debo enviarlo de la siguiente forma:

'Content-Type': 'application/json'

La función que realiza la petición es la siguiente:

function Autenticacion(datos) {

    var url = 'http://url'; 

    return $http.post(url, $httpParamSerializer(datos), {
        headers: {
            'Content-Type': 'application/json'
        }
    });

};

Lo cual me arroja el siguiente error

Error

OPTIONS http://API_URL 405 (Method Not Allowed)

 XMLHttpRequest cannot load http://API_URL. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.1.9:8100' is therefore not allowed access. The response had HTTP status code 405.

Pero cuando utilizo una herramienta, en mi caso ARC (Advance Rest Client) funciona. Lo cual se puede constatar en la imagen

enlace de la imagen de ARC

La API esta alojada en un servidor Azure.

Preguntado por: Pedro Miguel Pimienta Morales

Es un problema de CORS como te han comentado.

Si bien la solución es “tocar” el backend para que se solvente, también puedes probar con una extensión para el navegador (A mi me ha funcionado en algunos casos solo).

En Chrome por ejemplo utilizo: Allow-Control-Origin

Y lo tengo configurado de forma que en Intercepted URLs or URL patterns tengo añadido el valor: *:// *

Puedes probar a ver si con eso te soluciona al menos para salir del paso hasta que te digan como modificar correctamente la parte back.

A ver hermano, intenta lo siguiente:

var url = 'http://url'; 

var parametros = JSON.stringify({username:user_email, password:user_password});    

return $http.post(url, parametros, {
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        }
    });

Buena suerte 😀

Este es un problema de CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS).
Resumiendo, cuando realizas una llamada Ajax desde el navegador, el navegador primero realiza una petición OPTIONS, para negociar con el servidor si la petición se puede hacer. Cuando el origen y el destino son el mismo servidor, no hay problema, pero cuando son diferentes, el servidor debe permitir dicho origen para realizar la petición.

Cuando el servidor contesta, la cabecera Access-Control-Allow-Origin debe contener tu IP (o la ip de la aplicación de angularjs).

Para este caso, debes configurar tu servidor (donde tienes expuestos los servicios REST) para que en la cabecera Access-Control-Allow-Origin tenga algo como eso Access-Control-Allow-Origin=”*”. Por lo menos así lo he hecho en java.

Saludos

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *