Как запросить параметр привязки?

Я пытаюсь запросить привязку параметра id. Он продолжает проходить как 0. s2 имеет значение при подаче:

id=0, s=null
http://localhost/api/values/123

id=0, s2=true
http://localhost/api/values/123?s2=true

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpGet("sub/{id?}")] 
    public string Get([FromQuery]int id, string s2)
    {
        return "value";
    }

Почему id не захвачен?


person 4thSpace    schedule 14.01.2018    source источник
comment
Сними [FromQuery]. Вы явно указываете, что это должно исходить из строки запроса, но это не так.   -  person Kirk Larkin    schedule 14.01.2018
comment
@KirkLarkin: Отлично. Спасибо! Когда используется [FromQuery]?   -  person 4thSpace    schedule 14.01.2018
comment
Это если вы хотите быть более точным - привязка довольно умная и проверяет несколько источников (например, маршрут, строку запроса, тело). Вы можете использовать эти атрибуты (ссылка), если вы хотите быть более ясным и точным. например, [FromQuery] говорит, что только связывается, если параметр находится в строке запроса.   -  person Kirk Larkin    schedule 14.01.2018


Ответы (2)


Измените свой код, чтобы использовать FromRoute для идентификатора, поскольку он идет по маршруту, и также измените Http Get, он не соответствует тому, что вы передаете в URL-адресе.

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpGet()] 
    public string Get([FromRoute]int id, [FromQuery]string s2)
    {
        return "value";
    }
}
person Atul Chaudhary    schedule 15.01.2018
comment
Я вижу, что ваш код работает. Как только я удаляю [FromQuery] в OP, он также работает. Какая разница? - person 4thSpace; 15.01.2018
comment
эта ссылка поможет вам. stackoverflow.com/questions/37276932/ - person Atul Chaudhary; 15.01.2018

Ваш код должен быть таким

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpGet("sub/{id?}")] 
    public string Get(int? id, string s2)
    {
        return "value";
    }
}
person AJ -    schedule 15.01.2018