Невозможно связать параметры с помощью [FromQuery] ASP Net Core 2 API - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в ASP Net Core 2, я хочу связать различные параметры, которые поступают из строки запроса URL, с параметрами действия в моем действии:

[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
public IActionResult GetBuildingsBySearchCriteria([FromHeader] string idUser, [FromQuery]int page, [FromQuery]int pageSize, [FromQuery]string predicate)
{
    ....
}

Когда я проверяю свое действие с помощью почтальона, яустановить idUser в заголовке и другие параметры в URL, например:

http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr

В результате я получаю idUser, который отправляю из заголовка, но другие параметры пусты.

Я что-то упускаю или что-то не так в моем коде?

1 Ответ

0 голосов
/ 23 мая 2018

Если эти параметры должны быть в запросе , тогда они не нужны в шаблоне route

In

[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]

"{page}&{pageSize}&{predicate}" являются заполнителями в шаблоне route , поэтому [FromQuery] не может связать параметры.

[FromHeader], [FromQuery], [FromRoute], [FromForm]: Используйте их, чтобы указать точный источник привязки, который вы хотите применить .

выделение шахты

На основеВ приведенном примере URL-адреса и в предположении корневого маршрута можно использовать

[Route("api/[controller]")]
public class BuildingsController: Controller {

    //GET api/buildings?page=1&pageSize=10&predicate=fr
    [HttpGet("", Name = "GetBuildingsBySearchCriteria")]
    public IActionResult GetBuildingsBySearchCriteria(
        [FromHeader]string idUser, 
        [FromQuery]int page, 
        [FromQuery]int pageSize, 
        [FromQuery]string predicate) {
        //....
    }
}

или, в качестве альтернативы, их можно использовать в маршруте, например

[Route("api/[controller]")]
public class BuildingsController: Controller {

    //GET api/buildings/1/10/fr
    [HttpGet("{page:int}/{pageSize:int}/{predicate}", Name = "GetBuildingsBySearchCriteria")]
    public IActionResult GetBuildingsBySearchCriteria(
        [FromHeader]string idUser, 
        [FromRoute]int page, 
        [FromRoute]int pageSize, 
        [FromRoute]string predicate) {
        //....
    }
}

Ссылка Привязка моделив ASP.NET Core

...