Before you can use HttpClient
in your app, you must configure it using dependency injection.
Providing HttpClient
through dependency injection
HttpClient
is provided using the provideHttpClient
helper function, which most apps include in the application providers
in app.config.ts
.
export const appConfig: ApplicationConfig = { providers: [ provideHttpClient(), ]};
If your app is using NgModule-based bootstrap instead, you can include provideHttpClient
in the providers of your app's NgModule:
@NgModule({ providers: [ provideHttpClient(), ], // ... other application configuration})export class AppModule {}
You can then inject the HttpClient
service as a dependency of your components, services, or other classes:
@Injectable({providedIn: 'root'})export class ConfigService { constructor(private http: HttpClient) { // This service can now make HTTP requests via `this.http`. }}
Configuring features of HttpClient
provideHttpClient
accepts a list of optional feature configurations, to enable or configure the behavior of different aspects of the client. This section details the optional features and their usages.
withFetch
export const appConfig: ApplicationConfig = { providers: [ provideHttpClient( withFetch(), ), ]};
By default, HttpClient
uses the XMLHttpRequest
API to make requests. The withFetch
feature switches the client to use the fetch
API instead.
fetch
is a more modern API and is available in a few environments where XMLHttpRequest
is not supported. It does have a few limitations, such as not producing upload progress events.
withInterceptors(...)
withInterceptors
configures the set of interceptor functions which will process requests made through HttpClient
. See the interceptor guide for more information.
withInterceptorsFromDi()
withInterceptorsFromDi
includes the older style of class-based interceptors in the HttpClient
configuration. See the interceptor guide for more information.
HELPFUL: Functional interceptors (through withInterceptors
) have more predictable ordering and we recommend them over DI-based interceptors.
withRequestsMadeViaParent()
By default, when you configure HttpClient
using provideHttpClient
within a given injector, this configuration overrides any configuration for HttpClient
which may be present in the parent injector.
When you add withRequestsMadeViaParent()
, HttpClient
is configured to instead pass requests up to the HttpClient
instance in the parent injector, once they've passed through any configured interceptors at this level. This is useful if you want to add interceptors in a child injector, while still sending the request through the parent injector's interceptors as well.
CRITICAL: You must configure an instance of HttpClient
above the current injector, or this option is not valid and you'll get a runtime error when you try to use it.
withJsonpSupport()
Including withJsonpSupport
enables the .jsonp()
method on HttpClient
, which makes a GET request via the JSONP convention for cross-domain loading of data.
HELPFUL: Prefer using CORS to make cross-domain requests instead of JSONP when possible.
withXsrfConfiguration(...)
Including this option allows for customization of HttpClient
's built-in XSRF security functionality. See the security guide for more information.
withNoXsrfProtection()
Including this option disables HttpClient
's built-in XSRF security functionality. See the security guide for more information.
HttpClientModule
-based configuration
Some applications may configure HttpClient
using the older API based on NgModules.
This table lists the NgModules available from @angular/common/http
and how they relate to the provider configuration functions above.
NgModule | provideHttpClient() equivalent |
---|---|
HttpClientModule |
provideHttpClient(withInterceptorsFromDi()) |
HttpClientJsonpModule |
withJsonpSupport() |
HttpClientXsrfModule.withOptions(...) |
withXsrfConfiguration(...) |
HttpClientXsrfModule.disable() |
withNoXsrfProtection() |
Use caution when using HttpClientModule in multiple injectors
When HttpClientModule
is present in multiple injectors, the behavior of interceptors is poorly defined and depends on the exact options and provider/import ordering.
Prefer provideHttpClient
for multi-injector configurations, as it has more stable behavior. See the withRequestsMadeViaParent
feature above.