我在 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;
};
});
}
Web api 核心中的 FilterParameter 模型是:
public class FilterParameter
{
public string ParameterName;
public FilterOperator FilterOperator;
public string ParameterValue;
}
我的 web 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");
}
}
Id 很好,但问题是我的 filterParams 是空列表。知道为什么吗?
请您参考如下方法:
你应该使用HttpPost来实现它。
Angular :
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 尝试这样:
public ActionResult GetUsers(int id, [FromUri] List<FilterParameter> filterParams)
{
}
