Как сделать контроллер с изменениями параметров? - PullRequest
0 голосов
/ 20 декабря 2018

У меня такой запрос:

GET: /accounts/filter/?status_neq=test&birth_lt=643972596&country_eq=Endgland&limit=5&query_id=110

Итак, следующий запрос может быть таким:

GET: /accounts/filter/?status_eq=test&birth_gt=643972596&country_year=1970&limit=5&query_id=110

И т. Д.

Я создаю простойконтроллер, но я не знаю, как это сделать, чтобы вы принимали такие переменные входные параметры в контроллере:

[ResponseCache(CacheProfileName = "FilterCache", Duration = 10, Location = ResponseCacheLocation.Any, NoStore = false)]
[Route("/accounts/filter/")]
[ApiController]
public class FilterController : ControllerBase
{
    // GET: api/Filter
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET: api/Filter/5
    [HttpGet("{id}", Name = "Get")]
    public string Get(int id)
    {
        return "value";
    }

    // POST: api/Filter
    [HttpPost]
    public void Post([FromBody] string value)
    {
    }

    // PUT: api/Filter/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody] string value)
    {
    }

    // DELETE: api/ApiWithActions/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

В общем случае вы должны определять разные параметры для разных строк запроса.

Если вы не хотите указывать параметры в действии контроллера, вы можете попробовать HttpContext.Request.Query, чтобы получить всю строку запроса.

public ActionResult MultipleParameters()
{
    var parameters = HttpContext.Request.Query;
    return Ok(parameters.ToList());
}
0 голосов
/ 20 декабря 2018

Вам необходимо передать его в виде списка параметров в ваш метод действия внутри контроллера, или вы также можете использовать атрибут FromQuery .

[ResponseCache(CacheProfileName = "FilterCache", Duration = 10, Location = ResponseCacheLocation.Any, NoStore = false)]
[Route("/accounts/filter/")]
[ApiController]
public class FilterController : ControllerBase
{
    // GET: /accounts/filter/?status_eq=test&birth_gt=643972596&country_year=1970&limit=5&query_id=110
    [HttpGet]
    public IEnumerable<string> Get(string status_eq, long birth_gt, int country_year, int limit, int query_id)
)
    {
        return new string[] { "value1", "value2" };
    }
}

или

[ResponseCache(CacheProfileName = "FilterCache", Duration = 10, Location = ResponseCacheLocation.Any, NoStore = false)]
[Route("/accounts/filter/")]
[ApiController]
public class FilterController : ControllerBase
{
    // GET: /accounts/filter/?status_eq=test&birth_gt=643972596&country_year=1970&limit=5&query_id=110
    [HttpGet]
    public IEnumerable<string> Get([FromQuery] string status_eq, [FromQuery] long birth_gt, [FromQuery] int country_year, [FromQuery] int limit, [FromQuery] int query_id)
)
    {
        return new string[] { "value1", "value2" };
    }
}
...