我正在使用.net核心Web API。我从角度发布通用QueryFilter类。但是,类的通用部分返回null。当我更改为这样的参数时,它运行良好:
public async Task<ServiceResult> GetStudentsForGrid([FromQuery]QueryFilter queryFilter,[FromQuery]StudentFilter studentFilter)
{ } //This working perfectly
QueryFilter.cs
public class QueryFilter<T> where T : class
{
public string SortBy { get; set; }
public bool IsSortAscending { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
public T CustomFilter { get; set; }
}
StudentFilter.cs
public class StudentFilter
{
public string Name { get; set; }
public string Surname { get; set; }
}
Controller.cs (不起作用)
[HttpGet("GetStudentsForGrid")]
public async Task<ServiceResult> GetStudentsForGrid([FromQuery]QueryFilter<StudentFilter> queryFilter)
{ } //This not working
我不想每次都发送两个参数。因此,我想使用通用方式。我该如何解决这个空异常?
答案 0 :(得分:1)
如果您想使用“通用”方式,则假设您的控制器操作是:
public IActionResult GetStudentsForGrid([FromQuery]QueryFilter<StudentFilter> queryFilter)
{
var x= queryFilter;
return new JsonResult(x);
}
您必须使用格式正确的查询字符串发送请求:
GET https://localhost:5001/api/students?sortBy=Hello&pageSize=10&customFilter.Name=1&customFilter.SurName=2 HTTP/1.1
请注意我们传递customFilter.Name
和customFilter.SurName
参数的方式。
响应将是:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Kestrel
Transfer-Encoding: chunked
{
"sortBy": "Hello",
"isSortAscending": false,
"pageFirstIndex": 0,
"pageSize": 10,
"customFilter": {
"name": "1",
"surname": "2"
}
}