在HttpParams中删除null参数

时间:2017-12-08 04:53:36

标签: angular query-string asp.net-core-2.0 asp.net-core-webapi querystringparameter

我有一个条件对象,其中一些属性可以为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);

有没有办法从查询字符串中排除未定义的参数?

4 个答案:

答案 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)函数的返回值。