Как перенаправить к api / значениям?id = 1

#asp.net-core #routes #asp.net-core-webapi #asp.net-core-2.1

#asp.net-ядро #маршруты #asp.net-core-webapi #asp.net-core-2.1

Вопрос:

Я работаю с веб-api .net core 2.1. У меня есть ValuesController, и такие маршруты, как api / values / 5 и api / values /, работают нормально. Но теперь я хотел бы перенаправить к чему-то вроде api / значений?id = 5 amp; type = 2. Возможно ли иметь подобный маршрут?

Я искал stackoverflow и другие сайты, но не нашел способа сделать это. Я пробовал использовать приведенный ниже код, но не работает.

     [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value"   id;
        }

        [HttpGet]
        public ActionResult<string> Get(int id, int type)
        {
            return "value: "   id   "with type: "   type;
        }
    }
  

Я хотел бы выполнить маршрутизацию как api / values?id= 5 amp; type = 2 или api / values / id = 5 amp; type = 2

Ответ №1:

Вы не можете отличить маршрут по строке запроса. Вы должны объединить два метода ‘Get’ и вызвать api/values?id=5amp;type=2

 [HttpGet]
public ActionResult Get(int id, int type)
{

    if (id == 0 amp;amp; type == 0)
    {
        return Ok(new string[] { "value1", "value2" });
    }
    else
    {
        return Ok("value: "   id   " with type: "   type);
    }
}
  

Ответ №2:

Попробуйте внести следующие изменения :

     [HttpGet]
    [Route("id={id}amp;type={type}")]   // GET api/values/id=5amp;type=2
    public ActionResult<string> Get(int id, int type)
    {
        return "value: "   id   "with type: "   type;
    }