#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;
}