angular - Angular HttpClient 获取请求 URL 删除主题标签/数字符号
问题描述
我正在使用 httpclient get,当我#
在请求 URL 中有一个时,它会删除之后的所有内容#
例子:
预期要求:
https://jsonplaceholder.typicode.com/users/1#TEST
实际要求:
https://jsonplaceholder.typicode.com/users/1
我尝试使用 PathLocationStrategy,但它只影响路由器链接。
做了一个 slackblitz 的例子,它也有 PathLocationStrategy 。
Stackblitz:https ://stackblitz.com/edit/angular-http-client-p5yrdq
- 为什么会这样?
- 任何解决方案/解决方法?
解决方案
我的解决方案是拦截和编码 url 和参数。
app.module.ts
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: EncodeHttpParamsInterceptor,
multi: true,
},
EncodeHttpParamsInterceptor
@Injectable()
export class EncodeHttpParamsInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const params = new HttpParams({encoder: new CustomEncoder(), fromString: req.params.toString()});
const httpUrlEncoding = new HttpUrlEncodingCodec();
return next.handle(req.clone({
params,
url: httpUrlEncoding.encodeValue(req.url),
}));
}
}
自定义编码器
export class CustomEncoder implements HttpParameterCodec {
encodeKey(key: string): string {
return encodeURIComponent(key);
}
encodeValue(value: string): string {
return encodeURIComponent(value);
}
decodeKey(key: string): string {
return decodeURIComponent(key);
}
decodeValue(value: string): string {
return decodeURIComponent(value);
}
}
推荐阅读
- python-3.x - 为不同类型重新定义函数
- angular - 拖放带有对象数组的拖放
- spring-boot - 如何镜像 Maven 存储库
- mysql - 替换 SQL 表中的值
- finite-automata - 设计一个 FA 来接受 L,其中 L = 'a' 总是出现三倍的字符串
- c# - 使用 observable 按字母顺序排序数据
- java - NPE 很难从 logcat 中发现它似乎是 Arraylist 但应该设置每个项目
- docker - Docker 拒绝挂载 NFS 共享
- sql - Laravel Eloquent:选择一个字段等于另一个字段的记录
- google-apps-script - 继续接收 抱歉,无法删除所有未冻结的行