2013-04-24 16 views
6

ho provato il seguente comando, utilizzando risorse sul Angolare:angolare, tipo di contenuto non viene generato correttamente quando si utilizza risorse

angular.module('appServices', ['ngResource']).factory('Example', 
     function($resource){ 

      return $resource('http://api.example.com.br/teste', {}, { 
       query: {method:'GET', headers: {'Content-Type': 'application/json'}} 
     }); 
}); 

ma il tipo di contenuto http non viene generato correttamente, in questo caso "applicazione/json".

Ho visto domande simili come AngularJS resource not setting Content-Type, ma ho la versione Angular più recente (1.0.6/1.1.4).

Cosa c'è di sbagliato nel codice sopra?

Conclusione

  • come muggito accennato, HTTP Get metodo non dovrebbe avere un corpo.
  • Le intestazioni degli attributi non funzionano nella versione sopra descritta. Ho usato il seguente comando senza successo: query: {metodo: 'POST', intestazioni: {'Content-Type': 'application/json'}}
  • In questo modo ha funzionato per me: $ http.defaults.headers .put ['Content-Type'] = 'application/json';
+0

Come @gargc anche chiesto , sei sicuro di non voler impostare un'intestazione 'Accetta'? Cosa vuoi ottenere impostando Content-Type qui? –

risposta

15

al angular source, la linea 8742 nella versione 1.1.4:

// strip content-type if data is undefined 
    if (isUndefined(config.data)) { 
    delete reqHeaders['Content-Type']; 
    } 

L'intestazione Content-Type viene rimossa se la richiesta non contiene dati (un corpo di richiesta).

Penso che questo è il comportamento previsto dal GET richieste non hanno un corpo.

Un metodo POST, d'altra parte, imposterà il tipo di contenuto come previsto, purché abbia dati nel corpo della richiesta. Provare quanto segue:

Modificare il metodo per POST

query: {method:'POST', headers: {'Content-Type': 'application/json'}} 

E non chiamate la vostra azione di risorse con alcuni parametri:

Example.query(yourData) 

In questo caso il tipo di contenuto è impostato correttamente.

Edit:

Sembra che funziona anche con get, in questo caso i dati sono nel secondo parametro:

Example.query(yourParams, yourData) 

Un esempio: http://jsfiddle.net/WkFHH/

+0

Ok, hai ragione. Ho provato con post e Example.query ("test"), il tipo di contenuto funziona correttamente, ma cosa devo fare per modificare il tipo di contenuto "Get"? Ho fatto lo stesso, Example.query ("test") e anche Example.query (""), ancora non funziona. – raonirenosto

+1

Ma perché è necessario impostare il tipo di contenuto per una richiesta GET? non c'è un corpo/carico utile nella richiesta, i parametri sono nell'URL. Forse l'intestazione 'Accept' cosa vuoi? – gargc

+0

In ogni caso, mi sono reso conto che il passaggio dei dati come secondo parametro della funzione funziona per GET e impedisce la rimozione del tipo di contenuto. (risposta modificata) – gargc

0

sembra che sia ancora non supportato - se è necessario impostare le intestazioni è possibile utilizzare il look $http service

+0

È strano, sembra che l'abbiano fatto funzionare, https://github.com/angular/angular.js/issues/736. In realtà ho fatto come loro, ma non funziona anche se. – raonirenosto

+0

Hai ragione, sembra che sia stato aggiunto nel ramo instabile –

Problemi correlati