Опубликовать общий класс в .net core web API - PullRequest
0 голосов
/ 05 октября 2018

Я использую .net core Web API.Я публикую общий класс QueryFilter от angular.Но общая часть класса возвращает ноль.Когда я изменяю на такой параметр, он работает отлично:

 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 голосов
/ 05 октября 2018

Если вы хотите использовать «универсальный» способ, скажем, ваше действие контроллера:

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"
  }
}
...