这完全取决于您,但是当参数增多且具有较大的大小时,由于它是 HttpGet
,数据作为查询字符串参数在标头中发送,因此标头大小可能会超过限制。
您可以尝试使用 HttpPost
,因为它将数据发送到正文中,还使用类并且如果数据通过https传输,则不显示参数值:
[HttpPost]
public IHttpActionResult GetAllTestsByLocationIdAndPollTypeId([FromBody]TestLocation request)
在这里,我假设你可以创建一个类TestLocation
或者任何你想要的名称,并且拥有你需要的参数的公共属性。
现在,您需要在stringify
后发送类的JSON
对象,例如{'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所建议的。
{pollType}/{LocationId}/tests
将是一个非常有用的路由。 - Panagiotis Kanavos