在.net核心Web API中发布通用类

时间:2018-10-05 06:55:50

标签: c# .net asp.net-core asp.net-core-webapi

我正在使用.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

我不想每次都发送两个参数。因此,我想使用通用方式。我该如何解决这个空异常?

1 个答案:

答案 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.NamecustomFilter.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"
  }
}