WebApi + OData:限制最大结果

时间:2016-04-20 14:56:38

标签: validation asp.net-web-api odata

我有一个带有ODataOptions参数的WebAPI控制器。

我想确保用户无法一举下载整个数据库 所以我验证了options对象:

public IHttpActionResult Get(ODataQueryOptions<ViewModel> options)
{ 

    var oDataValidationSettings = new ODataValidationSettings
    {
        MaxTop = 100
    }
    try 
    {
        options.Validate(oDataValidationSettings);
    } 
    catch (ODataException ex)
    {
        return BadRequest("OData query validation failed: " + ex.Message);
    }
    //return results
}

这适用于像

这样的调用
http://host/api/controller?$filter=...&$top=1000

这将返回预期的验证错误消息。

但是,通过简单地提出要求来避免这样做很容易:

http://host/api/controller?

没有$top,没有。 这实际上会返回整个表格!
如果根本没有指定$top参数,则不会触发验证器。

我可以在从oData选项构造查询时添加.Take(100),但它看起来很hacky。

有没有更好的方法来处理丢失的$top

1 个答案:

答案 0 :(得分:1)

您可以尝试使用PageSize来限制返回的实体数量。 有关如何使用它,请参阅此示例。 https://github.com/OData/ODataSamples/tree/master/WebApi/v4/ODataPagingSample