删除 HttpParams 中的空参数
Remove null params in HttpParams
我有一个条件对象,它的某些属性可以为空,如果我什么都不做,查询字符串包括 &p=undefined
之类的,这是不可取的,因为在 WebApi 中,这些属性为 "null"
而不是 null
所以在 Angular 客户端
中给出这个
return this._http
.get<ExposureDifference[]>(AppSettings.ExposureRunDataQueryString, {params : <any>criteria, withCredentials: true})
.catch<any, ExposureDifference[]>(this._trace.handleError("GET " + AppSettings.ExposureRunDataQueryString + criteria, []))
.finally(() => this.isLoading = false);
我可以得到查询字符串
http://localhost:63037/api/exposureRuns/data/?id=3&secsymb=undefined&fund=EL&esectype=SWAP_CDS
有没有办法从查询字符串中排除未定义的参数?
如果它们的值为 undefined
(这与根本不在对象中的键不同),您应该使用 JavaScript 的 delete
(MDN) 关键字在客户端过滤它们):
if (queryObject.secsymb === undefined) {
delete queryObject.secsymb;
}
然后在您的控制器方法中使用默认方法参数:
GetExposureRunsData(int id, string fund, SecType sectype, string secsymb = null)
如果您确保不包含查询字符串参数,那么您的参数将默认为 null
你可以试试这个:
this.httpClient.get('../api/path', {
params: Object.entries(queryParameterObject).reduce((queryParams, [key, value]) => queryParams.set(key, value), new HttpParams());
});
对我有用。
试试这个功能
removeNullValuesFromQueryParams(params: HttpParams) {
const paramsKeysAux = params.keys();
paramsKeysAux.forEach((key) => {
const value = params.get(key);
if (value === null || value === undefined || value === '') {
params['map'].delete(key);
}
});
return params;
}
并且在您的拦截服务中,将请求的参数设置为 removeNullValuesFromQueryParams(req.params) 函数的 return。
这就是我通常做的。很有魅力。
getDocumentsReport(filter: object) {
let params = new HttpParams();
Object.keys(filter).forEach(
key => filter[key] && (params = params.append(key, filter[key]))
);
return this.http.get<object>(
environment.apiServer + '/api/reports/documents',
{
params
}
);
}
我有一个条件对象,它的某些属性可以为空,如果我什么都不做,查询字符串包括 &p=undefined
之类的,这是不可取的,因为在 WebApi 中,这些属性为 "null"
而不是 null
所以在 Angular 客户端
return this._http
.get<ExposureDifference[]>(AppSettings.ExposureRunDataQueryString, {params : <any>criteria, withCredentials: true})
.catch<any, ExposureDifference[]>(this._trace.handleError("GET " + AppSettings.ExposureRunDataQueryString + criteria, []))
.finally(() => this.isLoading = false);
我可以得到查询字符串
http://localhost:63037/api/exposureRuns/data/?id=3&secsymb=undefined&fund=EL&esectype=SWAP_CDS
有没有办法从查询字符串中排除未定义的参数?
如果它们的值为 undefined
(这与根本不在对象中的键不同),您应该使用 JavaScript 的 delete
(MDN) 关键字在客户端过滤它们):
if (queryObject.secsymb === undefined) {
delete queryObject.secsymb;
}
然后在您的控制器方法中使用默认方法参数:
GetExposureRunsData(int id, string fund, SecType sectype, string secsymb = null)
如果您确保不包含查询字符串参数,那么您的参数将默认为 null
你可以试试这个:
this.httpClient.get('../api/path', {
params: Object.entries(queryParameterObject).reduce((queryParams, [key, value]) => queryParams.set(key, value), new HttpParams());
});
对我有用。
试试这个功能
removeNullValuesFromQueryParams(params: HttpParams) {
const paramsKeysAux = params.keys();
paramsKeysAux.forEach((key) => {
const value = params.get(key);
if (value === null || value === undefined || value === '') {
params['map'].delete(key);
}
});
return params;
}
并且在您的拦截服务中,将请求的参数设置为 removeNullValuesFromQueryParams(req.params) 函数的 return。
这就是我通常做的。很有魅力。
getDocumentsReport(filter: object) {
let params = new HttpParams();
Object.keys(filter).forEach(
key => filter[key] && (params = params.append(key, filter[key]))
);
return this.http.get<object>(
environment.apiServer + '/api/reports/documents',
{
params
}
);
}