Это полностью зависит от вас, но да, когда параметры увеличиваются и имеют большой размер. Размер заголовка может превышать, поскольку это HttpGet
, когда данные отправляются в заголовке в виде параметров строки запроса.
Вы можете попробовать HttpPost
поскольку он отправляет данные в теле, также использует класс и не показывает значения параметров, если данные превышают https:
[HttpPost]
public IHttpActionResult GetAllTestsByLocationIdAndPollTypeId([FromBody]TestLocation request)
Здесь я предполагаю, что вы можете создать класс TestLocation
или любое другое имя, которое вам нравитсяПубличные свойства имени нужного вам параметра.
Теперь вам нужно отправить JSON
объект класса после stringify
как {'locationId':1, 'pollTypeId':1, 'itemsToLoad':10, 'search': 'your text'}
и изменить ajax на post.Так как вы оставили, как вы звоните из ajax, я оставляю это вам
ОБНОВЛЕНИЕ
Согласно обратной связи @PanagiotisKanavos (сообщение не кэшируется) &Если вы знаете, что строка запроса не длинная, вы можете попробовать добавить маршрут, например:
config.Routes.MapHttpRoute("MyRoute", "{controller}/{locationId}/{pollTypeId}/{itemsToLoad}/{search}", new { controller = "Region", action = "GetCountries" })
или Добавить атрибут на уровне контроллера, если маршруты / параметры уникальны для методов действия:
[Route("GetAllTestsByLocationIdAndPollTypeId/{locationId}/{pollTypeId}/{itemsToLoad}/{search}")]
[HttpGet]
public IHttpActionResult GetAllTestsByLocationIdAndPollTypeId(int locationId, int pollTypeId, int itemsToLoad = 8, string search = "")
Теперь ваш вызов API может быть таким: http://localhost/controller/1/2/10/test
ИЛИ
Вы можете попробовать комбинацию маршрута и запроса.например, {LocationId} / {pollType} / Tests? itemsToLoad = N & search = X в соответствии с предложением @ KirkLarkin