我有一个条件对象,其中一些属性可以为null,如果我不做任何事情,查询字符串包括那些不可取的&p=undefined
,因为在WebApi这些属性为{{1而不是"null"
所以在Angular客户端中给出了这个
null
我可以将查询字符串作为
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);
有没有办法从查询字符串中排除未定义的参数?
答案 0 :(得分:2)
如果客户端的值为undefined
(与根本不在对象中的密钥不同),则应使用JavaScript的delete
(MDN)关键字对客户端进行过滤:
if (queryObject.secsymb === undefined) {
delete queryObject.secsymb;
}
然后在控制器方法中使用默认方法参数:
GetExposureRunsData(int id, string fund, SecType sectype, string secsymb = null)
如果您确保未包含查询字符串参数,那么您的参数将默认为null
答案 1 :(得分:1)
You can try this:
array (
0 =>
array (
'no' => '1',
'subtitle' => 'Perbekalan',
'title' => 'lombok ijo',
),
1 =>
array (
'no' => '2',
'subtitle' => 'Perbekalan',
'title' => 'bawang abang',
),
)
array (
0 =>
array (
'no' => '3',
'subtitle' => 'Inventaris',
'title' => 'Wajan',
),
)
It worked for me.
答案 2 :(得分:1)
这就是我通常要做的。就像魅力一样。
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
}
);
}
答案 3 :(得分:0)
尝试使用此功能
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)函数的返回值。