2014-02-21 4 views
3

Как настроить заголовок Http, добавляющий заголовки к вызову.Настройка глобального запроса Http Заголовки на угловом дроте

Стараюсь следующие

class GlobalHttpHeaders { 
    static setup(Injector inj){ 
    HttpDefaultHeaders http = inj.get(HttpDefaultHeaders); 
    http.setHeaders([{"X-Requested-With":"XMLHttpRequest"}], "COMMON"); 
    } 
} 

А в приложении последняя строка:

Injector inj = ngBootstrap(module: new SiteIceiModule()); 
    GlobalHttpHeaders.setup(inj); 

Но это не работает.

ответ

2

(я думаю), я получил его работать:

@Injectable() 
class MyDefaultHeaders extends HttpDefaultHeaders { 
    @override 
    setHeaders(Map<String, String> headers, String method) { 
    super.setHeaders(headers, method); 
    //if(method.toUpperCase() == 'POST') { 
    headers['X-Requested-With'] = 'XMLHttpRequest'; 
    //} 
    } 
} 


@NgComponent(selector: 'my-comp', publishAs: 'ctrl', template: 
    '<div>My component</div>') 
class MyComponent { 
    Http http; 
    MyComponent(this.http) { 
    //http.request('http://www.google.com/'); 
    var h = http; 
     // debugger didn't show http so I filed https://code.google.com/p/dart/issues/detail?id=17486 

    Map m = {}; 
    http.defaults.headers.setHeaders(m, 'GET'); 
    print(m); 
    // prints: 
    // {Accept: application/json, text/plain, */*, X-Requested-With: XMLHttpRequest} 

    } 
} 


class MyAppModule extends Module { 
    MyAppModule() { 

    type(MyComponent); 

    type(HttpDefaultHeaders, implementedBy: MyDefaultHeaders); 

    init.createParser(this); 
    } 
} 

Я не мог изучить http проверить заголовки, так как отладчик не показывал мне поле, но как указано в комментарии , когда я применяю headers.setHeaders сделать карту внутри MyComponent Я получаю свой собственный заголовок (это то, что Http делает с headers) я использовал DI 0.0.33, Angular 0.9.9

+1

Он работает как шарм. –

+1

Вышеприведенный пример не работал в Angular v12, потому что ему нужен '@Injectable()' в MyDefaultHeaders. –

+0

Спасибо за подсказку. Я добавил. –

0

Вы пробовали что-то вроде этого:

class SiteIceiModule extends Module { 
    SiteIceiModule() { 
    // ... 
    factory(HttpDefaultHeaders, (inj) => inj.get(HttpDefaultHeaders)..setHeader({...})); 
    // ... 
    } 
} 
+0

Да, у меня есть. Кажется, setHeader не должен устанавливать заголовки класса HttpDefaultHeaders, но вызывается HttpRequest (или как называется Угловой конкретный класс), чтобы получить заголовки в HttpDefaultHeaders, установленные самим. Невозможно изменить заголовки по умолчанию, настроенные в HttpDefaultHeaders. Я попытался сделать DI для ввода пользовательского класса, который реализует этот интерфейс, но DI, кажется, предотвращает переопределение типа, заданного Angular, AppModule. Возможно, я допустил некоторую ошибку, но я потратил довольно много времени. –

+0

Этот пример приводит к 'Незаконным аргументам: не удается разрешить циклическую зависимость! (разрешение BlockCache -> Http -> HttpDefaults -> HttpDefaultHeaders -> HttpDefaultHeaders) ' –

2

Я немного опоздал к обсуждению, но ответа не было предусмотрено использовать для меня, как мои запросы HTTP сделаны с помощью 3-сторонней библиотеки. Но я понял способ изменить заголовки по умолчанию.

Вы можете получить доступ к объекту HttpDefaultHeaders и изменить его, как карту.

headers['Common'].addAll({'Authorization': 'Basic $auth', 'X-Testing': 'Testing'}); 

Это также работает с сторонними библиотеками, такими как гамак.

Примечание: Я использовал угловой 1.1.1. Я не знаю, в какой версии это было добавлено.

Смежные вопросы