Как отправить массив из angular 8 в ядро ​​web api? - PullRequest
1 голос
/ 10 октября 2019

У меня есть метод в файле typeScript:

searchUsers() {
    this.filterParams = [
        { parameterName: 'FirstName', filterOperator: 'Like', parameterValue: this.firstName },
        { parameterName: 'LastName', filterOperator: 'Like', parameterValue: this.lastName },
        { parameterName: 'UserName', filterOperator: 'Like', parameterValue: this.userName },
        { parameterName: 'Email', filterOperator: 'Like', parameterValue: this.email }
    ];
    this.service.getUsers(this.id, this.filterParams);
}

, который вызывает метод обслуживания:

getUsers(id, filterParams) {
  let params = new HttpParams()
    .set('id', id);
    .set('filterParams', filterParams);
  this.http.get(this.rootURL + '/user/getUsers', { params: params })
    .subscribe((res: any) => {
      this.users = res.users;
    };
  });
}

Модель FilterParameter в ядре веб-API:

public class FilterParameter
{
    public string ParameterName;
    public FilterOperator FilterOperator;
    public string ParameterValue;
}

Мой основной метод веб-API срабатывает после нажатия на кнопку поиска в угловом. Это мой метод в ядре web api:

[Route("getUsers/{id?}/{filterParams?}")]
[HttpGet]
public ActionResult GetUsers(int id, [FromQuery] List<FilterParameter> filterParams)
{
    try
    {
        _logger.LogInformation("Geting all users from the database");
        var users = _baseBL.GetUsers(id, filterModel);
        return Ok(new { users = users.Results, usersCount = users.RowCount});
    }
    catch (Exception ex)
    {
        _logger.LogError($"Something went wrong: {ex}");
        return StatusCode(500, "Internal server error");
    }
}

Идентификатор хорош, но проблема в том, что мои filterParams - пустой список. Есть идеи почему?

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

Вы должны использовать HttpPost для достижения этого.

Угловой:

this.http.post(this.rootURL + '/user/getUsers/' + id, filterParams)
    .subscribe((res: any) => {
      this.users = res.users;
    };
});

.NET

[Route("getUsers/{id?}")]
[HttpPost]
public ActionResult GetMembersInGym(int gymId, [FromBody] List<FilterParameter> filterParams)
{
 ...
}

Чтобы использовать Get, используйте FromUri tryкак это:

public ActionResult GetUsers(int id, [FromUri] List<FilterParameter> filterParams)
{
}
0 голосов
/ 10 октября 2019

Сначала к вашему id необходимо добавить URL в качестве параметров, а затем для отправки параметров запроса используйте {params:yourparamsobject}, поэтому ваш код должен быть

  getUsers(id, filterParams) {
      let params = {filterParams:filterParams};
      this.http.get(this.rootURL + '/user/getUsers'+id, { params: params })
        .subscribe((res: any) => {
          this.users = res.users;
        };
      });
    }

Также обратите внимание, что в вашей модели API FilterOperator естьтипа FilterOperator и в пользовательском интерфейсе, который вы отправляете, и в строке, поэтому либо измените FilterOperator, чтобы ввести строку в API, либо измените filterOperator в соответствии с типом в пользовательском интерфейсе

...