如何使用ASP.NET核心设置RESTAPI的效率过滤结果



我目前正在改建我们在公司中使用多年的旧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呼叫者中添加帖子的搜索功能,但是我可以通过浏览器非常轻松地将测试值投入测试。

最新更新