gpt4 book ai didi

c# - 何时在 API C# 中使用模型作为 url 参数的参数

转载 作者:行者123 更新时间:2023-11-30 12:20:20 29 4
gpt4 key购买 nike

我在 Controller 中有一个返回对象列表的方法。 Controller 的实现并不重要。该方法称为 GetAllTestsByLocationIdAndPollTypeId 并返回“测试”对象列表。 GET 有 4 个参数,locationIdpollTypeIditemsToLoad 和一个用于搜索 的字符串。我希望添加更多参数,并且觉得在一个 url 中传入 6 个对象有点多。方法签名如下所示:

[HttpGet]
public IHttpActionResult GetAllTestsByLocationIdAndPollTypeId(int locationId, int pollTypeId, int itemsToLoad = 8, string search = "")

我应该传入一个包含我当前使用的参数值的模型吗?

编辑:我不能执行 [HttpPost] 因为 POST 请求不会被缓存,因此可能很昂贵,在这种情况下,会很昂贵。

编辑:我使用可选参数解决了查询字符串中的过滤器问题,以减少传入的内容数量。

最佳答案

这完全取决于您,但是是的,当参数增加且尺寸较大时, header 大小可能会超过,因为它是 HttpGet,其中数据作为查询字符串参数在 header 中发送。

您可以尝试 HttpPost,因为它在正文中发送数据,还使用类并且如果数据通过 https 则不显示参数值:

[HttpPost]
public IHttpActionResult GetAllTestsByLocationIdAndPollTypeId([FromBody]TestLocation request)

在这里我假设你可以创建类 TestLocation 或任何你喜欢的名称以及你需要的参数名称的公共(public)属性。

现在您需要在 stringify 之后发送类的 JSON 对象,例如 {'locationId':1, 'pollTypeId':1, 'itemsToLoad':10 , 'search': 'your text'} & 更改 ajax 以发布。既然你已经离开了你如何从 ajax 调用我把它留给你

更新


根据@PanagiotisKanavos 的反馈(帖子未缓存)和您提供的查询字符串不长的信息,您可以尝试添加如下路线:

config.Routes.MapHttpRoute("MyRoute", "{controller}/{locationId}/{pollTypeId}/{itemsToLoad}/{search}", new { controller = "Region", action = "GetCountries" })

或者如果路由/参数对于操作方法是唯一的,则在 Controller 级别添加属性:

[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 所建议

关于c# - 何时在 API C# 中使用模型作为 url 参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52402256/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com