Skip to main content
 首页 » 编程设计

c#之如何将数组从 angular 8 发送到 web api 核心

2024年02月25日31kenshinobiy

我在 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) 
{ 
}