我在documentation中找不到方法来为所有http请求设置基本API url。是否可以使用Angular HttpClient?如何为Angular HttpClient设置baseUrl?
回答
我认为没有默认的方法来做到这一点。做HttpService并在里面你可以定义你的默认URL的属性,并使方法可以用你的属性URL调用http.get和其他方法。然后注入HttpService而不是HttpClient
我做了Http服务,但希望HttpClient有点聪明 –
使用新的HttpClient拦截器。
创建实现HttpInterceptor
正确的注射:
import {Injectable} from '@angular/core';
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class APIInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const apiReq = req.clone({ url: `your-api-url/${req.url}` });
return next.handle(apiReq);
}
}
的HttpInterceptor可以克隆该请求,并改变它,你想,在这种情况下,我定义的默认路径为所有的HTTP请求。
提供以下配置HttpClientModule:
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: APIInterceptor,
multi: true,
}
]
现在,所有的请求都将与your-api-url/
这太棒了!有一件事,你不需要在这里使用Injectable装饰器,只有当你想要将某些东西注入到装饰类中时才需要它。 – BroiSatse
开始你并不一定需要一个基本URL与HttpClient的中, docs说你只需要指定请求的api部分,如果你打电话给同一台服务器,就像这样简单:
this.http.get('/api/items').subscribe(data => { ...
但是,如果您需要或想要指定基本URL,则可以。
我有这样做2点建议:
。具有静态类属性的助手类。
export class HttpClientHelper{
static baseURL: string = 'http://localhost:8080/myApp';
}
this.http.get(`${HttpClientHelper.baseURL}/api/items`);//in your service class
。一类属性的基类,所以任何新的业务应该扩展它:
export class BackendBaseService {
baseURL: string = 'http://localhost:8080/myApp';
constructor(){}
}
@Injectable()
export class ItemsService extends BackendBaseService{
constructor(private http: HttpClient){
super();
}
public listAll(): Observable<any>{
return this.http.get(`${this.baseURL}/api/items`);
}
}
- 1. 如何设置baseUrl
- 2. 如何设置默认baseUrl
- 3. jQuery:设置ckeditor baseurl
- 4. 设置的BaseURL的笨
- 5. 如何为Apache的HttpClient设置全局HTTP代理设置
- 6. Angular 4如何为整个应用程序设置HttpClient的默认选项?
- 7. 如何为一个新的网站设置Angular2 cli baseurl?
- 8. 在Symfony2配置中动态设置BaseUrl
- 9. HttpClient - 如何设置Headers上传文件?
- 10. 如何正确设置HttpClient的延续?
- 11. HttpClient - 如何设置指纹和_csrf?
- 12. 如何设置httpclient的字符编码
- 13. Apache HttpClient 4.0.3 - 如何为POST请求设置cookie和sessionID
- 14. 如何为SWT浏览器和Jetty设置相同的CookieStore HttpClient
- 15. Angular 4如何等待httpclient完成
- 16. Angular 4.3&5:如何扩展HttpClient?
- 17. @ angular/common/http的HttpClient
- 18. Yii:将“标签”的“url”设置为baseurl的外部
- 19. 如何在Angular 5(或> 4.3)中将Http转换为HttpClient?
- 20. 如何在RequireJS配置中将request.getContextPath()定义为baseUrl?
- 21. Kaa设备连接baseurl
- 22. 如何使用Twitter Bootstrap设置Meteor-Angular?
- 23. 如何在Angular Universal中设置cookie?
- 24. Angular 4.3 HttpClient响应对象
- 25. Angular 4 HttpClient查询参数
- 26. Angular 4.3具有MockBackend的HttpClient
- 27. Angular 4.3 HttpClient:拦截响应
- 28. 如何设置Angular UI Bootstrap Datepicker默认设置空字段?
- 29. 如何设置Angular config var来设置服务器地址?
- 30. 奇怪的NSURL表现为:baseUrl总是设置为一个奇怪的值
您可以创建一个[拦截](https://angular.io/api/common/http/HttpInterceptor),它将用任何你想要的基础来更新url。 –
是不是在这种情况下使用拦截器的开销? –
如果您只想更改它,那可能是。另一个选择是使用一个简单的函数getApiUrl(),它将进行所需的任何转换,如添加基本路径。 –