我目前正在改建我们在公司中使用多年的旧API。我有一个特定的端点,呼叫getBookings接受大量参数:
public HttpResponseMessage GetBookings(string contactId, string timeFilter = "upcoming", string bookedBy = null, string resourceTypeIds = null, string clientId = null (...), int pageSize = 25, int pageIndex = 0)
{
(...)
}
添加所有这些参数并不感觉自然,我一直在寻找一种做这种事情的替代方法。
1/i研究了ODATA,这似乎提供了一些提前过滤/分页选项。
Odata Microsoft版本似乎不是最新的(或未维护?(
2/i也可以在预订下添加一个名为搜索(HTTPPOST(的端点并接受JSON过滤器。
这种方法并不是真正的静止性,并且会引起一些缓存问题(因为HTTPPOST请求没有缓存(。
3/i也可以在我的Get预订端点添加一个名为查询的参数。此查询将包含我的过滤器,例如'StartDate> = ...和....'。
这种方法似乎很复杂,因为我需要实际解析查询以转换为lambda表达式。我也可以使用dapper,但是它很容易受到SQL注入的影响。
4/我发现的最后一个选项是实际创建一个必要参数的端点。
这很容易实施,但有点丑陋?!
您将如何在ASP.NET Core Webapi中实现过滤/分页?
谢谢,seb
我没有在.net core中尝试过此范围,但是对于WebAPI,我将创建一个"标准"或"参数"对象,该对象包含可以从URL设置的属性。<<<<<<<<<<<<<<<<
,例如
public class BookingSearchParameters
{
public string contactId { get; set; }
public string timeFilter { get; set; }
etc..
}
然后我将方法以该对象为参数。
[HttpGet()]
public HttpResponseMessage GetBookings([FromUri] BookingSearchParameters params)
{
... do stuff ...
}
要使URL调用您基本上要做的方法,但参数绑定将填充参数对象中的适当值。
如果要将值发布到相似的函数,也可以使用相同的对象。
我们将此方法用于通常会从实际API呼叫者中添加帖子的搜索功能,但是我可以通过浏览器非常轻松地将测试值投入测试。