2015-03-12 4 views
4

У меня есть REST API в языке GO и front-end в Angularjs, но когда я получаю свой ресурс в угловом моем настраиваемом заголовке, не существует.

Контроллер:

Persons.query(
    function (data, headerGetter, status) { 

     var headers = headerGetter(); 

     console.log(headers["X-Total-Count"]); //PRINT: undefined 
     console.log(headers) //PRINT: {Content-Type:application/json;charset=utf-8} 
     console.log(data); //PRINT: [{name:'mr x', age:'67'}, ....] 

    }, 
    function (error) { 
     console.error(error); 
    }); 

Модель:

myApp.factory("Persons", function ($resource) { 
    return $resource(api_url+"/persons"); 
}); 

Response Chrome или Firefox, любой клиент:

Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:* 
Content-Length:1839 
Content-Type:application/json; charset=utf-8 
Date:Thu, 12 Mar 2015 21:53:54 GMT 
X-Total-Count:150 
+2

Я удалил тег Go, потому что заголовок отчетливо виден ... поэтому Go выполнил свою работу. Я добавил вам Угловой тег ... потому что это угловой вопрос. –

+0

Можете ли вы отобразить вывод 'console.log (headers)'? – alphamikevictor

+0

Что вы подразумеваете под «когда я получаю свой ресурс в угловом, мой пользовательский заголовок не существует»? Когда вы это испытываете? В каком коде? –

ответ

5

Вы делаете запрос из другого домена, чем тот, где ваш API находится, операция, которая называется Cross-site HTTP requests (CORS)

Чтобы использовать пользовательские заголовки, вам необходимо установить еще один адрес: Access-Control-Expose-Headers

Если вы хотите, чтобы клиенты имели доступ к другим заголовкам, вы должны иметь значение , используя заголовок Access-Control-Expose-Headers. Значение этого заголовка представляет собой список заголовков ответов с разделителями-запятыми, которые вы хотите выставить клиенту .

Этот заголовок позволяет заголовкам списков серверов, чтобы браузеру разрешалось . Например:

Access-Control-Expose-Headers: X-My-Custom-Header,X-Another-Custom-Header 

Это позволяет X-My-настраиваемого-заголовок и заголовки X-Другой-заказ заголовку подвергаться воздействию браузера.


Как мне сделать это в .NET (я предполагаю, что это своего рода похожи Go):

HttpContext.Current.Response.AppendHeader("Access-Control-Expose-Headers", "X-Total-Pages, X-Records"); 
HttpContext.Current.Response.AppendHeader("X-Total-Pages", pages.ToString()); 
HttpContext.Current.Response.AppendHeader("X-Records", records.ToString()); 

И в AngularJS я получаю заголовки, как это:

var headers = headers(); 
headers['x-total-pages'] 
2

Так что это вопрос CORS. Установка

Access-Control-Expose-Headers:"X-Total-Count" 

в ответе сервера решает вашу проблему.

Вам нужно будет разобрать ответ на номер:

parseInt(headers('X-Total-Count'), 10) 
Смежные вопросы