我在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. UIWebView的baseURL设置为NSDocumentDirectory?
- 4. jQuery:设置ckeditor baseurl
- 5. Android:如何将ConnectionTimeOut值设置为HttpClient
- 6. 使用InMemoryTestContainerFactory时为JerseyTest设置baseUrl
- 7. 设置的BaseURL的笨
- 8. 如何为Apache的HttpClient设置全局HTTP代理设置
- 9. Angular 4如何为整个应用程序设置HttpClient的默认选项?
- 10. 如何设置Angular
- 11. 如何为一个新的网站设置Angular2 cli baseurl?
- 12. 在Symfony2配置中动态设置BaseUrl
- 13. HttpClient - 如何设置指纹和_csrf?
- 14. 如何正确设置HttpClient的延续?
- 15. 如何设置httpclient的字符编码
- 16. HttpClient - 如何设置Headers上传文件?
- 17. 设置按钮状态为HTTPCLient Titely
- 18. Angular 4.3&5:如何扩展HttpClient?
- 19. Angular 4如何等待httpclient完成
- 20. 为Angular设置d3-tip
- 21. 如何使用HttpClient将HTTPS端点设置为HttpPost?
- 22. 如何为SWT浏览器和Jetty设置相同的CookieStore HttpClient
- 23. 如何为我的HttpClient PostAsync第二个参数设置HttpContent?
- 24. Apache HttpClient 4.0.3 - 如何为POST请求设置cookie和sessionID
- 25. 如何设置的BaseURL而部署在Zend框架
- 26. 如何通过命令行设置Jekyll的baseurl?
- 27. 如何将httpClient配置为jsoup
- 28. @ angular/common/http的HttpClient
- 29. 如何将Android WebView BaseURL设置为应用程序专用文件
- 30. Yii:将“标签”的“url”设置为baseurl的外部
您可以创建一个[拦截](https://angular.io/api/common/http/HttpInterceptor),它将用任何你想要的基础来更新url。 –
是不是在这种情况下使用拦截器的开销? –
如果您只想更改它,那可能是。另一个选择是使用一个简单的函数getApiUrl(),它将进行所需的任何转换,如添加基本路径。 –