2016-09-14 3 views
14

Ich habe etwas ähnliches wie den folgenden Code auf domain.com:Wie kann ich Header lesen, die von meiner API mit eckigen gesendet werden?

$http.post("http://api.domain.com/Controller/Method", 
    JSON.stringify(data), 
    { 
     headers: { 
      'Content-Type': 'application/json' 
     } 
    }) 
    .then(function (response) { 
     console.log(response); 
    }, function (response) { 
     // something went wrong 
    }); 
} 

Es große Kommunikation mit meinem .NET-API funktioniert. response.data enthält alle Daten, die mein Server für mich benötigt. Wir haben jedoch ein neues Sicherheitstoken, das wir von der API an den Client übergeben, und wir leiten es im Paketheader zurück an den Client. Ich weiß, dass das Token zurückgegeben wird, weil ich es in dem Paket auf der Registerkarte Netzwerk in Chrome-Debugger lesen kann. Jedoch response.headers() enthält nur content-type:"application/json; charset=utf-8" Es hat nicht, was in dem Paket ist. Hat jemand eine Idee?

Die Daten werden von der API zurückgegeben wie so (C#) HttpContext.Current.Response.AppendHeader("session",Guid.NewGuid().ToString());

So würde ich response erwarten einen Header session genannt haben, aber es funktioniert nicht. Es ist jedoch in dem Paket.

+0

ist es als Cookie gesendet? – charlietfl

+0

@charlietfl schließlich werden die Daten als ein Cookie gesetzt, aber nicht im Moment, ich habe in den Code von meiner API, die den Header an das Antwortpaket angehängt – Halter

+0

Haben Sie versucht [this] (http://stackoverflow.com/ Fragen/28805589/How-to-Read-Antwort-Header-in-angularjs)? – Tamas

Antwort

13

Verwenden Sie die Header-Variable in Erfolg und Fehler Rückrufe

$http.get('/url'). 
    success(function(data, status, headers, config) { 
    //things to do 
    }) 
    .error(function(data, status, headers, config) { 
    //things to do 
    }); 
0

Es gibt zwei Möglichkeiten von $http Rufbehandlung dh .success und .then .Aber .success seit langer Zeit von Angular veraltet ist, wird so empfiehlt es sich, verwenden .then .Jetzt die Frage hier ist die demo ein einfacher GET-Aufruf in diesem

$http.get('test.json').then(function(response) { 
     $scope.collection = response.data.Collections; 
     console.log(response); 
     console.log(response.headers()); 
    }); 

zu beantworten ich ein Authentifizierungstoken festgelegt habe, die Anforderung zu validieren $http.defaults.headers.common['Auth-Token'] = '1234';, aber wenn ich console.log (response.headers()) es sieht aus wie unten

cache-control : "no-cache" 
cf-ray : "2e3a4163cdf43084-SIN" 
content-encoding : "gzip" 
content-type : "application/json; charset=utf-8" 
date : "Sat, 17 Sep 2016 05:46:02 GMT" 
etag : ""1ae47a56e2b2ea9ddc982cc0e61e469a-static-gzip"" 
server : "cloudflare-nginx" 
status : "304" 
vary : "accept-encoding" 
x-xss-protection : "0" 

Dadurch wird die Authentifizierungs-Token nicht zeigen, aber in der Antwort ist es auch eine Aufgabe config genannt die auch hat headers Objekt, das mein Authentifizierungstoken enthält. Versuchen Sie dieses Muster zu verfolgen, hoffe, dass dieser Ansatz Ihnen eine neue Sicht auf Ihre Problembeschreibung gibt.

config : Object 
     L-> headers: Object 
      L->  Accept : "application/json, text/plain, */*" 
        Auth-Token : "1234" 
0

Verwenden Sie die Header-Methode, die im Erfolgsrückruf zurückgegeben wird.

$http.get('/url'). 
    success(function(data, status, headers, config) { 
    response.headers = headers(); 
    console.log(response.headers, response.headers['auth_token']); 
    }) 
    .error(function(data, status, headers, config) { 
    //things to do 
    }); 

Vergessen Sie nicht, headers() aufzurufen.

0
 // Simple GET request example: 
$http({ 
    method: 'GET', 
    url: '/someUrl' 
}).then(function successCallback(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }, function errorCallback(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 


    The response object has these properties: 

    data – {string|Object} – The response body transformed with the transform functions. 
    status – {number} – HTTP status code of the response. 
    headers – {function([headerName])} – Header getter function. 
    config – {Object} – The configuration object that was used to generate the request. 
    statusText – {string} – HTTP status text of the response. 
    A response status code between 200 and 299 is considered a success status and will result in the success callback being called. Any response status code outside of that range is considered an error status and will result in the error callback being called. Also, status codes less than -1 are normalized to zero. -1 usually means the request was aborted, e.g. using a config.timeout. Note that if the response is a redirect, XMLHttpRequest will transparently follow it, meaning that the outcome (success or error) will be determined by the final response status code. 
0
$http.post("http://api.domain.com/Controller/Method", 
    JSON.stringify(data), 
    { 
     headers: { 
      'Content-Type': 'application/json' 
     } 
    }) 
    .then(function (response) { 
     console.log(response); 
     //this will get you session header information 
     console.log(response.headers('session')); 

    }, function (response) { 
     // something went wrong 
    }); 
} 
Verwandte Themen