DevExtreme Angular - Intercept HTTP Requests
HTTP request interception in DevExtreme components might be useful for the following cases:
Intercept errors to display more informative messages to a user.
Inject an authentication token in the Authorization header.
Log API requests and responses for debugging or usage analysis.
Track upload progress and display a progress bar.
In Angular apps, you can use HttpInterceptor to intercept Ajax requests in DevExtreme components such as DataSource, FileUploader, and Map. This task requires that you import DxHttpModule
.
DxHttpModule
, Angular restricts access to XMLHttpRequest. This means you cannot get the XHR object in functions such as ODataContext.errorHandler, FileManager.fileSystemProvider.beforeAjaxSend, FileUploader.onUploadStarted, etc.The following code snippet demonstrates how to intercept a request in DataSource:
Angular
import { Component, effect, signal } from '@angular/core';
import DataSource from 'devextreme/data/data_source';
import ODataStore from 'devextreme/data/odata/store';
import { DxTreeViewModule } from 'devextreme-angular';
import { DxHttpModule } from 'devextreme-angular/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [],
standalone: true,
imports: [DxHttpModule, DxTreeViewModule],
})
export class AppComponent {
title = 'DxHttpModule Example';
dataSource = new DataSource({
onLoadError: (error) => {
if (error.message) {
this.loadError.set(error.message);
}
},
store: new ODataStore({
version: 2,
url: 'http://www.example.com/Northwind.svc',
}),
});
loadError = signal('');
noDataText = '';
constructor() {
effect(() => {
this.noDataText = this.loadError();
});
this.dataSource.load().then((data) => {
console.log('DataSource is loaded:', data);
});
}
}
import { Injectable } from '@angular/core'; import { throwError } from 'rxjs'; import { HttpHandler, HttpInterceptor, HttpRequest, } from '@angular/common/http'; @Injectable() export class LoggingInterceptor implements HttpInterceptor { intercept(req: HttpRequest<any>, next: HttpHandler) { // to show that request is intercepted, a permission access error is raised return throwError(() => ({ status: 403, statusText: 'Request intercepted. Access Denied', })); // return next.handle(req); } }
import { bootstrapApplication } from '@angular/platform-browser'; import { AppComponent } from './app/app.component'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { LoggingInterceptor } from './app/interceptors'; bootstrapApplication(AppComponent, { providers: [ { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true }, ], });
If you have technical questions, please create a support ticket in the DevExpress Support Center.