Extraits de l'exemple d'application Visual studio 2017 asp.net core webapi angular.
inclure les lignes ci-dessous dans Main.ts
export function getBaseUrl() {
return document.getElementsByTagName('base')[0].href;
}
const providers = [
{ provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] }
];
dans votre composant
constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
http.get<WeatherForecast[]>(baseUrl + 'api/SampleData/WeatherForecasts').subscribe(result => {
this.forecasts = result;
}, error => console.error(error));
}
mon code main.ts complet ressemble à ce qui suit
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
export function getBaseUrl() {
return document.getElementsByTagName('base')[0].href;
}
const providers = [
{ provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] }
];
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err));
mon code de composant ressemble à ce qui suit
import { Component, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'fetch-weather',
templateUrl: './weather.component.html',
styleUrls: ['./weather.component.scss']
})
export class WeatherComponent {
public forecasts: WeatherForecast[];
constructor(http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
http.get<WeatherForecast[]>(baseUrl + 'api/SampleData/WeatherForecasts').subscribe(result => {
this.forecasts = result;
}, error => console.error(error));
}
}
interface WeatherForecast {
dateFormatted: string;
temperatureC: number;
temperatureF: number;
summary: string;
}
2 votes
Vous pourriez créer un intercepteur qui mettra à jour l'url avec la base que vous voulez.
1 votes
N'est-ce pas une surcharge que d'utiliser des intercepteurs dans ce cas ?
0 votes
Si vous ne voulez changer que cela, oui, c'est possible. Une autre option serait d'avoir une simple fonction getApiUrl() qui fera toutes les transformations nécessaires, comme l'ajout du chemin de base.
0 votes
Ou créer une classe dérivée de XHRBackend et créer la connexion avec l'url de base en place. Il y a des avantages et des inconvénients pour chaque approche, je ne suis pas au courant d'une façon "plus simple" de fournir cela.
0 votes
Personnellement, j'utilise un intercepteur mais je recommande d'y ajouter d'autres fonctionnalités telles que la définition d'en-têtes pour toutes les demandes.